var $protobuf = window.protobuf;
$protobuf.roots.default=window;
// Common aliases
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;

// Exported root namespace
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});

$root.msg = (function() {

    /**
     * Namespace msg.
     * @exports msg
     * @namespace
     */
    var msg = {};

    msg.MSG_LoginRequest_CS = (function() {

        /**
         * Properties of a MSG_LoginRequest_CS.
         * @memberof msg
         * @interface IMSG_LoginRequest_CS
         * @property {string|null} [request] MSG_LoginRequest_CS request
         */

        /**
         * Constructs a new MSG_LoginRequest_CS.
         * @memberof msg
         * @classdesc Represents a MSG_LoginRequest_CS.
         * @implements IMSG_LoginRequest_CS
         * @constructor
         * @param {msg.IMSG_LoginRequest_CS=} [properties] Properties to set
         */
        function MSG_LoginRequest_CS(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_LoginRequest_CS request.
         * @member {string} request
         * @memberof msg.MSG_LoginRequest_CS
         * @instance
         */
        MSG_LoginRequest_CS.prototype.request = "";

        /**
         * Creates a new MSG_LoginRequest_CS instance using the specified properties.
         * @function create
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {msg.IMSG_LoginRequest_CS=} [properties] Properties to set
         * @returns {msg.MSG_LoginRequest_CS} MSG_LoginRequest_CS instance
         */
        MSG_LoginRequest_CS.create = function create(properties) {
            return new MSG_LoginRequest_CS(properties);
        };

        /**
         * Encodes the specified MSG_LoginRequest_CS message. Does not implicitly {@link msg.MSG_LoginRequest_CS.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {msg.IMSG_LoginRequest_CS} message MSG_LoginRequest_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_LoginRequest_CS.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.request != null && message.hasOwnProperty("request"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.request);
            return writer;
        };

        /**
         * Encodes the specified MSG_LoginRequest_CS message, length delimited. Does not implicitly {@link msg.MSG_LoginRequest_CS.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {msg.IMSG_LoginRequest_CS} message MSG_LoginRequest_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_LoginRequest_CS.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_LoginRequest_CS message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_LoginRequest_CS} MSG_LoginRequest_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_LoginRequest_CS.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_LoginRequest_CS();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.request = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_LoginRequest_CS message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_LoginRequest_CS} MSG_LoginRequest_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_LoginRequest_CS.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_LoginRequest_CS message.
         * @function verify
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_LoginRequest_CS.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.request != null && message.hasOwnProperty("request"))
                if (!$util.isString(message.request))
                    return "request: string expected";
            return null;
        };

        /**
         * Creates a MSG_LoginRequest_CS message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_LoginRequest_CS} MSG_LoginRequest_CS
         */
        MSG_LoginRequest_CS.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_LoginRequest_CS)
                return object;
            var message = new $root.msg.MSG_LoginRequest_CS();
            if (object.request != null)
                message.request = String(object.request);
            return message;
        };

        /**
         * Creates a plain object from a MSG_LoginRequest_CS message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_LoginRequest_CS
         * @static
         * @param {msg.MSG_LoginRequest_CS} message MSG_LoginRequest_CS
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_LoginRequest_CS.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.request = "";
            if (message.request != null && message.hasOwnProperty("request"))
                object.request = message.request;
            return object;
        };

        /**
         * Converts this MSG_LoginRequest_CS to JSON.
         * @function toJSON
         * @memberof msg.MSG_LoginRequest_CS
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_LoginRequest_CS.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_LoginRequest_CS;
    })();

    msg.MSG_LoginResponse_SC = (function() {

        /**
         * Properties of a MSG_LoginResponse_SC.
         * @memberof msg
         * @interface IMSG_LoginResponse_SC
         * @property {msg.IT_AccountData|null} [account] MSG_LoginResponse_SC account
         * @property {msg.IT_UserBaseData|null} [userBase] MSG_LoginResponse_SC userBase
         */

        /**
         * Constructs a new MSG_LoginResponse_SC.
         * @memberof msg
         * @classdesc Represents a MSG_LoginResponse_SC.
         * @implements IMSG_LoginResponse_SC
         * @constructor
         * @param {msg.IMSG_LoginResponse_SC=} [properties] Properties to set
         */
        function MSG_LoginResponse_SC(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_LoginResponse_SC account.
         * @member {msg.IT_AccountData|null|undefined} account
         * @memberof msg.MSG_LoginResponse_SC
         * @instance
         */
        MSG_LoginResponse_SC.prototype.account = null;

        /**
         * MSG_LoginResponse_SC userBase.
         * @member {msg.IT_UserBaseData|null|undefined} userBase
         * @memberof msg.MSG_LoginResponse_SC
         * @instance
         */
        MSG_LoginResponse_SC.prototype.userBase = null;

        /**
         * Creates a new MSG_LoginResponse_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {msg.IMSG_LoginResponse_SC=} [properties] Properties to set
         * @returns {msg.MSG_LoginResponse_SC} MSG_LoginResponse_SC instance
         */
        MSG_LoginResponse_SC.create = function create(properties) {
            return new MSG_LoginResponse_SC(properties);
        };

        /**
         * Encodes the specified MSG_LoginResponse_SC message. Does not implicitly {@link msg.MSG_LoginResponse_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {msg.IMSG_LoginResponse_SC} message MSG_LoginResponse_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_LoginResponse_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.account != null && message.hasOwnProperty("account"))
                $root.msg.T_AccountData.encode(message.account, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.userBase != null && message.hasOwnProperty("userBase"))
                $root.msg.T_UserBaseData.encode(message.userBase, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MSG_LoginResponse_SC message, length delimited. Does not implicitly {@link msg.MSG_LoginResponse_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {msg.IMSG_LoginResponse_SC} message MSG_LoginResponse_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_LoginResponse_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_LoginResponse_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_LoginResponse_SC} MSG_LoginResponse_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_LoginResponse_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_LoginResponse_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.account = $root.msg.T_AccountData.decode(reader, reader.uint32());
                    break;
                case 2:
                    message.userBase = $root.msg.T_UserBaseData.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_LoginResponse_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_LoginResponse_SC} MSG_LoginResponse_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_LoginResponse_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_LoginResponse_SC message.
         * @function verify
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_LoginResponse_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.account != null && message.hasOwnProperty("account")) {
                var error = $root.msg.T_AccountData.verify(message.account);
                if (error)
                    return "account." + error;
            }
            if (message.userBase != null && message.hasOwnProperty("userBase")) {
                var error = $root.msg.T_UserBaseData.verify(message.userBase);
                if (error)
                    return "userBase." + error;
            }
            return null;
        };

        /**
         * Creates a MSG_LoginResponse_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_LoginResponse_SC} MSG_LoginResponse_SC
         */
        MSG_LoginResponse_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_LoginResponse_SC)
                return object;
            var message = new $root.msg.MSG_LoginResponse_SC();
            if (object.account != null) {
                if (typeof object.account !== "object")
                    throw TypeError(".msg.MSG_LoginResponse_SC.account: object expected");
                message.account = $root.msg.T_AccountData.fromObject(object.account);
            }
            if (object.userBase != null) {
                if (typeof object.userBase !== "object")
                    throw TypeError(".msg.MSG_LoginResponse_SC.userBase: object expected");
                message.userBase = $root.msg.T_UserBaseData.fromObject(object.userBase);
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_LoginResponse_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_LoginResponse_SC
         * @static
         * @param {msg.MSG_LoginResponse_SC} message MSG_LoginResponse_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_LoginResponse_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.account = null;
                object.userBase = null;
            }
            if (message.account != null && message.hasOwnProperty("account"))
                object.account = $root.msg.T_AccountData.toObject(message.account, options);
            if (message.userBase != null && message.hasOwnProperty("userBase"))
                object.userBase = $root.msg.T_UserBaseData.toObject(message.userBase, options);
            return object;
        };

        /**
         * Converts this MSG_LoginResponse_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_LoginResponse_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_LoginResponse_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_LoginResponse_SC;
    })();

    /**
     * UserState enum.
     * @name msg.UserState
     * @enum {string}
     * @property {number} State_Idel=1 State_Idel value
     * @property {number} State_Team=2 State_Team value
     * @property {number} State_Match=3 State_Match value
     * @property {number} State_DoubleConfirm=4 State_DoubleConfirm value
     * @property {number} State_Gaming=5 State_Gaming value
     * @property {number} State_GameResult=6 State_GameResult value
     */
    msg.UserState = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[1] = "State_Idel"] = 1;
        values[valuesById[2] = "State_Team"] = 2;
        values[valuesById[3] = "State_Match"] = 3;
        values[valuesById[4] = "State_DoubleConfirm"] = 4;
        values[valuesById[5] = "State_Gaming"] = 5;
        values[valuesById[6] = "State_GameResult"] = 6;
        return values;
    })();

    msg.T_AccountData = (function() {

        /**
         * Properties of a T_AccountData.
         * @memberof msg
         * @interface IT_AccountData
         * @property {string|null} [account] T_AccountData account
         * @property {number|Long|null} [userId] T_AccountData userId
         */

        /**
         * Constructs a new T_AccountData.
         * @memberof msg
         * @classdesc Represents a T_AccountData.
         * @implements IT_AccountData
         * @constructor
         * @param {msg.IT_AccountData=} [properties] Properties to set
         */
        function T_AccountData(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * T_AccountData account.
         * @member {string} account
         * @memberof msg.T_AccountData
         * @instance
         */
        T_AccountData.prototype.account = "";

        /**
         * T_AccountData userId.
         * @member {number|Long} userId
         * @memberof msg.T_AccountData
         * @instance
         */
        T_AccountData.prototype.userId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new T_AccountData instance using the specified properties.
         * @function create
         * @memberof msg.T_AccountData
         * @static
         * @param {msg.IT_AccountData=} [properties] Properties to set
         * @returns {msg.T_AccountData} T_AccountData instance
         */
        T_AccountData.create = function create(properties) {
            return new T_AccountData(properties);
        };

        /**
         * Encodes the specified T_AccountData message. Does not implicitly {@link msg.T_AccountData.verify|verify} messages.
         * @function encode
         * @memberof msg.T_AccountData
         * @static
         * @param {msg.IT_AccountData} message T_AccountData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_AccountData.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.account != null && message.hasOwnProperty("account"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.account);
            if (message.userId != null && message.hasOwnProperty("userId"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.userId);
            return writer;
        };

        /**
         * Encodes the specified T_AccountData message, length delimited. Does not implicitly {@link msg.T_AccountData.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_AccountData
         * @static
         * @param {msg.IT_AccountData} message T_AccountData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_AccountData.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_AccountData message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_AccountData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_AccountData} T_AccountData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_AccountData.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_AccountData();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.account = reader.string();
                    break;
                case 2:
                    message.userId = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_AccountData message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_AccountData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_AccountData} T_AccountData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_AccountData.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_AccountData message.
         * @function verify
         * @memberof msg.T_AccountData
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_AccountData.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.account != null && message.hasOwnProperty("account"))
                if (!$util.isString(message.account))
                    return "account: string expected";
            if (message.userId != null && message.hasOwnProperty("userId"))
                if (!$util.isInteger(message.userId) && !(message.userId && $util.isInteger(message.userId.low) && $util.isInteger(message.userId.high)))
                    return "userId: integer|Long expected";
            return null;
        };

        /**
         * Creates a T_AccountData message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_AccountData
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_AccountData} T_AccountData
         */
        T_AccountData.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_AccountData)
                return object;
            var message = new $root.msg.T_AccountData();
            if (object.account != null)
                message.account = String(object.account);
            if (object.userId != null)
                if ($util.Long)
                    (message.userId = $util.Long.fromValue(object.userId)).unsigned = true;
                else if (typeof object.userId === "string")
                    message.userId = parseInt(object.userId, 10);
                else if (typeof object.userId === "number")
                    message.userId = object.userId;
                else if (typeof object.userId === "object")
                    message.userId = new $util.LongBits(object.userId.low >>> 0, object.userId.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a T_AccountData message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_AccountData
         * @static
         * @param {msg.T_AccountData} message T_AccountData
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_AccountData.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.account = "";
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.userId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.userId = options.longs === String ? "0" : 0;
            }
            if (message.account != null && message.hasOwnProperty("account"))
                object.account = message.account;
            if (message.userId != null && message.hasOwnProperty("userId"))
                if (typeof message.userId === "number")
                    object.userId = options.longs === String ? String(message.userId) : message.userId;
                else
                    object.userId = options.longs === String ? $util.Long.prototype.toString.call(message.userId) : options.longs === Number ? new $util.LongBits(message.userId.low >>> 0, message.userId.high >>> 0).toNumber(true) : message.userId;
            return object;
        };

        /**
         * Converts this T_AccountData to JSON.
         * @function toJSON
         * @memberof msg.T_AccountData
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_AccountData.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_AccountData;
    })();

    msg.T_UserBaseData = (function() {

        /**
         * Properties of a T_UserBaseData.
         * @memberof msg
         * @interface IT_UserBaseData
         * @property {number|Long|null} [userId] T_UserBaseData userId
         * @property {string|null} [userName] T_UserBaseData userName
         */

        /**
         * Constructs a new T_UserBaseData.
         * @memberof msg
         * @classdesc Represents a T_UserBaseData.
         * @implements IT_UserBaseData
         * @constructor
         * @param {msg.IT_UserBaseData=} [properties] Properties to set
         */
        function T_UserBaseData(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * T_UserBaseData userId.
         * @member {number|Long} userId
         * @memberof msg.T_UserBaseData
         * @instance
         */
        T_UserBaseData.prototype.userId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * T_UserBaseData userName.
         * @member {string} userName
         * @memberof msg.T_UserBaseData
         * @instance
         */
        T_UserBaseData.prototype.userName = "";

        /**
         * Creates a new T_UserBaseData instance using the specified properties.
         * @function create
         * @memberof msg.T_UserBaseData
         * @static
         * @param {msg.IT_UserBaseData=} [properties] Properties to set
         * @returns {msg.T_UserBaseData} T_UserBaseData instance
         */
        T_UserBaseData.create = function create(properties) {
            return new T_UserBaseData(properties);
        };

        /**
         * Encodes the specified T_UserBaseData message. Does not implicitly {@link msg.T_UserBaseData.verify|verify} messages.
         * @function encode
         * @memberof msg.T_UserBaseData
         * @static
         * @param {msg.IT_UserBaseData} message T_UserBaseData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_UserBaseData.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.userId != null && message.hasOwnProperty("userId"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.userId);
            if (message.userName != null && message.hasOwnProperty("userName"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.userName);
            return writer;
        };

        /**
         * Encodes the specified T_UserBaseData message, length delimited. Does not implicitly {@link msg.T_UserBaseData.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_UserBaseData
         * @static
         * @param {msg.IT_UserBaseData} message T_UserBaseData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_UserBaseData.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_UserBaseData message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_UserBaseData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_UserBaseData} T_UserBaseData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_UserBaseData.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_UserBaseData();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.userId = reader.uint64();
                    break;
                case 2:
                    message.userName = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_UserBaseData message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_UserBaseData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_UserBaseData} T_UserBaseData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_UserBaseData.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_UserBaseData message.
         * @function verify
         * @memberof msg.T_UserBaseData
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_UserBaseData.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.userId != null && message.hasOwnProperty("userId"))
                if (!$util.isInteger(message.userId) && !(message.userId && $util.isInteger(message.userId.low) && $util.isInteger(message.userId.high)))
                    return "userId: integer|Long expected";
            if (message.userName != null && message.hasOwnProperty("userName"))
                if (!$util.isString(message.userName))
                    return "userName: string expected";
            return null;
        };

        /**
         * Creates a T_UserBaseData message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_UserBaseData
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_UserBaseData} T_UserBaseData
         */
        T_UserBaseData.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_UserBaseData)
                return object;
            var message = new $root.msg.T_UserBaseData();
            if (object.userId != null)
                if ($util.Long)
                    (message.userId = $util.Long.fromValue(object.userId)).unsigned = true;
                else if (typeof object.userId === "string")
                    message.userId = parseInt(object.userId, 10);
                else if (typeof object.userId === "number")
                    message.userId = object.userId;
                else if (typeof object.userId === "object")
                    message.userId = new $util.LongBits(object.userId.low >>> 0, object.userId.high >>> 0).toNumber(true);
            if (object.userName != null)
                message.userName = String(object.userName);
            return message;
        };

        /**
         * Creates a plain object from a T_UserBaseData message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_UserBaseData
         * @static
         * @param {msg.T_UserBaseData} message T_UserBaseData
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_UserBaseData.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.userId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.userId = options.longs === String ? "0" : 0;
                object.userName = "";
            }
            if (message.userId != null && message.hasOwnProperty("userId"))
                if (typeof message.userId === "number")
                    object.userId = options.longs === String ? String(message.userId) : message.userId;
                else
                    object.userId = options.longs === String ? $util.Long.prototype.toString.call(message.userId) : options.longs === Number ? new $util.LongBits(message.userId.low >>> 0, message.userId.high >>> 0).toNumber(true) : message.userId;
            if (message.userName != null && message.hasOwnProperty("userName"))
                object.userName = message.userName;
            return object;
        };

        /**
         * Converts this T_UserBaseData to JSON.
         * @function toJSON
         * @memberof msg.T_UserBaseData
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_UserBaseData.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_UserBaseData;
    })();

    msg.MSG_ForwardToUser = (function() {

        /**
         * Properties of a MSG_ForwardToUser.
         * @memberof msg
         * @interface IMSG_ForwardToUser
         * @property {number|Long|null} [userId] MSG_ForwardToUser userId
         * @property {Array.<number|Long>|null} [userIds] MSG_ForwardToUser userIds
         * @property {Uint8Array|null} [cmdData] MSG_ForwardToUser cmdData
         * @property {number|Long|null} [createTime] MSG_ForwardToUser createTime
         */

        /**
         * Constructs a new MSG_ForwardToUser.
         * @memberof msg
         * @classdesc Represents a MSG_ForwardToUser.
         * @implements IMSG_ForwardToUser
         * @constructor
         * @param {msg.IMSG_ForwardToUser=} [properties] Properties to set
         */
        function MSG_ForwardToUser(properties) {
            this.userIds = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_ForwardToUser userId.
         * @member {number|Long} userId
         * @memberof msg.MSG_ForwardToUser
         * @instance
         */
        MSG_ForwardToUser.prototype.userId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_ForwardToUser userIds.
         * @member {Array.<number|Long>} userIds
         * @memberof msg.MSG_ForwardToUser
         * @instance
         */
        MSG_ForwardToUser.prototype.userIds = $util.emptyArray;

        /**
         * MSG_ForwardToUser cmdData.
         * @member {Uint8Array} cmdData
         * @memberof msg.MSG_ForwardToUser
         * @instance
         */
        MSG_ForwardToUser.prototype.cmdData = $util.newBuffer([]);

        /**
         * MSG_ForwardToUser createTime.
         * @member {number|Long} createTime
         * @memberof msg.MSG_ForwardToUser
         * @instance
         */
        MSG_ForwardToUser.prototype.createTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;

        /**
         * Creates a new MSG_ForwardToUser instance using the specified properties.
         * @function create
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {msg.IMSG_ForwardToUser=} [properties] Properties to set
         * @returns {msg.MSG_ForwardToUser} MSG_ForwardToUser instance
         */
        MSG_ForwardToUser.create = function create(properties) {
            return new MSG_ForwardToUser(properties);
        };

        /**
         * Encodes the specified MSG_ForwardToUser message. Does not implicitly {@link msg.MSG_ForwardToUser.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {msg.IMSG_ForwardToUser} message MSG_ForwardToUser message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_ForwardToUser.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.userId != null && message.hasOwnProperty("userId"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.userId);
            if (message.userIds != null && message.userIds.length)
                for (var i = 0; i < message.userIds.length; ++i)
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.userIds[i]);
            if (message.cmdData != null && message.hasOwnProperty("cmdData"))
                writer.uint32(/* id 3, wireType 2 =*/26).bytes(message.cmdData);
            if (message.createTime != null && message.hasOwnProperty("createTime"))
                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createTime);
            return writer;
        };

        /**
         * Encodes the specified MSG_ForwardToUser message, length delimited. Does not implicitly {@link msg.MSG_ForwardToUser.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {msg.IMSG_ForwardToUser} message MSG_ForwardToUser message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_ForwardToUser.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_ForwardToUser message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_ForwardToUser} MSG_ForwardToUser
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_ForwardToUser.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_ForwardToUser();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.userId = reader.uint64();
                    break;
                case 2:
                    if (!(message.userIds && message.userIds.length))
                        message.userIds = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.userIds.push(reader.uint64());
                    } else
                        message.userIds.push(reader.uint64());
                    break;
                case 3:
                    message.cmdData = reader.bytes();
                    break;
                case 4:
                    message.createTime = reader.int64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_ForwardToUser message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_ForwardToUser} MSG_ForwardToUser
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_ForwardToUser.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_ForwardToUser message.
         * @function verify
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_ForwardToUser.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.userId != null && message.hasOwnProperty("userId"))
                if (!$util.isInteger(message.userId) && !(message.userId && $util.isInteger(message.userId.low) && $util.isInteger(message.userId.high)))
                    return "userId: integer|Long expected";
            if (message.userIds != null && message.hasOwnProperty("userIds")) {
                if (!Array.isArray(message.userIds))
                    return "userIds: array expected";
                for (var i = 0; i < message.userIds.length; ++i)
                    if (!$util.isInteger(message.userIds[i]) && !(message.userIds[i] && $util.isInteger(message.userIds[i].low) && $util.isInteger(message.userIds[i].high)))
                        return "userIds: integer|Long[] expected";
            }
            if (message.cmdData != null && message.hasOwnProperty("cmdData"))
                if (!(message.cmdData && typeof message.cmdData.length === "number" || $util.isString(message.cmdData)))
                    return "cmdData: buffer expected";
            if (message.createTime != null && message.hasOwnProperty("createTime"))
                if (!$util.isInteger(message.createTime) && !(message.createTime && $util.isInteger(message.createTime.low) && $util.isInteger(message.createTime.high)))
                    return "createTime: integer|Long expected";
            return null;
        };

        /**
         * Creates a MSG_ForwardToUser message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_ForwardToUser} MSG_ForwardToUser
         */
        MSG_ForwardToUser.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_ForwardToUser)
                return object;
            var message = new $root.msg.MSG_ForwardToUser();
            if (object.userId != null)
                if ($util.Long)
                    (message.userId = $util.Long.fromValue(object.userId)).unsigned = true;
                else if (typeof object.userId === "string")
                    message.userId = parseInt(object.userId, 10);
                else if (typeof object.userId === "number")
                    message.userId = object.userId;
                else if (typeof object.userId === "object")
                    message.userId = new $util.LongBits(object.userId.low >>> 0, object.userId.high >>> 0).toNumber(true);
            if (object.userIds) {
                if (!Array.isArray(object.userIds))
                    throw TypeError(".msg.MSG_ForwardToUser.userIds: array expected");
                message.userIds = [];
                for (var i = 0; i < object.userIds.length; ++i)
                    if ($util.Long)
                        (message.userIds[i] = $util.Long.fromValue(object.userIds[i])).unsigned = true;
                    else if (typeof object.userIds[i] === "string")
                        message.userIds[i] = parseInt(object.userIds[i], 10);
                    else if (typeof object.userIds[i] === "number")
                        message.userIds[i] = object.userIds[i];
                    else if (typeof object.userIds[i] === "object")
                        message.userIds[i] = new $util.LongBits(object.userIds[i].low >>> 0, object.userIds[i].high >>> 0).toNumber(true);
            }
            if (object.cmdData != null)
                if (typeof object.cmdData === "string")
                    $util.base64.decode(object.cmdData, message.cmdData = $util.newBuffer($util.base64.length(object.cmdData)), 0);
                else if (object.cmdData.length)
                    message.cmdData = object.cmdData;
            if (object.createTime != null)
                if ($util.Long)
                    (message.createTime = $util.Long.fromValue(object.createTime)).unsigned = false;
                else if (typeof object.createTime === "string")
                    message.createTime = parseInt(object.createTime, 10);
                else if (typeof object.createTime === "number")
                    message.createTime = object.createTime;
                else if (typeof object.createTime === "object")
                    message.createTime = new $util.LongBits(object.createTime.low >>> 0, object.createTime.high >>> 0).toNumber();
            return message;
        };

        /**
         * Creates a plain object from a MSG_ForwardToUser message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_ForwardToUser
         * @static
         * @param {msg.MSG_ForwardToUser} message MSG_ForwardToUser
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_ForwardToUser.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.userIds = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.userId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.userId = options.longs === String ? "0" : 0;
                object.cmdData = options.bytes === String ? "" : [];
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.createTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.createTime = options.longs === String ? "0" : 0;
            }
            if (message.userId != null && message.hasOwnProperty("userId"))
                if (typeof message.userId === "number")
                    object.userId = options.longs === String ? String(message.userId) : message.userId;
                else
                    object.userId = options.longs === String ? $util.Long.prototype.toString.call(message.userId) : options.longs === Number ? new $util.LongBits(message.userId.low >>> 0, message.userId.high >>> 0).toNumber(true) : message.userId;
            if (message.userIds && message.userIds.length) {
                object.userIds = [];
                for (var j = 0; j < message.userIds.length; ++j)
                    if (typeof message.userIds[j] === "number")
                        object.userIds[j] = options.longs === String ? String(message.userIds[j]) : message.userIds[j];
                    else
                        object.userIds[j] = options.longs === String ? $util.Long.prototype.toString.call(message.userIds[j]) : options.longs === Number ? new $util.LongBits(message.userIds[j].low >>> 0, message.userIds[j].high >>> 0).toNumber(true) : message.userIds[j];
            }
            if (message.cmdData != null && message.hasOwnProperty("cmdData"))
                object.cmdData = options.bytes === String ? $util.base64.encode(message.cmdData, 0, message.cmdData.length) : options.bytes === Array ? Array.prototype.slice.call(message.cmdData) : message.cmdData;
            if (message.createTime != null && message.hasOwnProperty("createTime"))
                if (typeof message.createTime === "number")
                    object.createTime = options.longs === String ? String(message.createTime) : message.createTime;
                else
                    object.createTime = options.longs === String ? $util.Long.prototype.toString.call(message.createTime) : options.longs === Number ? new $util.LongBits(message.createTime.low >>> 0, message.createTime.high >>> 0).toNumber() : message.createTime;
            return object;
        };

        /**
         * Converts this MSG_ForwardToUser to JSON.
         * @function toJSON
         * @memberof msg.MSG_ForwardToUser
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_ForwardToUser.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_ForwardToUser;
    })();

    msg.T_Vec3 = (function() {

        /**
         * Properties of a T_Vec3.
         * @memberof msg
         * @interface IT_Vec3
         * @property {number|null} [X] T_Vec3 X
         * @property {number|null} [Y] T_Vec3 Y
         * @property {number|null} [Z] T_Vec3 Z
         */

        /**
         * Constructs a new T_Vec3.
         * @memberof msg
         * @classdesc Represents a T_Vec3.
         * @implements IT_Vec3
         * @constructor
         * @param {msg.IT_Vec3=} [properties] Properties to set
         */
        function T_Vec3(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * T_Vec3 X.
         * @member {number} X
         * @memberof msg.T_Vec3
         * @instance
         */
        T_Vec3.prototype.X = 0;

        /**
         * T_Vec3 Y.
         * @member {number} Y
         * @memberof msg.T_Vec3
         * @instance
         */
        T_Vec3.prototype.Y = 0;

        /**
         * T_Vec3 Z.
         * @member {number} Z
         * @memberof msg.T_Vec3
         * @instance
         */
        T_Vec3.prototype.Z = 0;

        /**
         * Creates a new T_Vec3 instance using the specified properties.
         * @function create
         * @memberof msg.T_Vec3
         * @static
         * @param {msg.IT_Vec3=} [properties] Properties to set
         * @returns {msg.T_Vec3} T_Vec3 instance
         */
        T_Vec3.create = function create(properties) {
            return new T_Vec3(properties);
        };

        /**
         * Encodes the specified T_Vec3 message. Does not implicitly {@link msg.T_Vec3.verify|verify} messages.
         * @function encode
         * @memberof msg.T_Vec3
         * @static
         * @param {msg.IT_Vec3} message T_Vec3 message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Vec3.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.X != null && message.hasOwnProperty("X"))
                writer.uint32(/* id 1, wireType 5 =*/13).float(message.X);
            if (message.Y != null && message.hasOwnProperty("Y"))
                writer.uint32(/* id 2, wireType 5 =*/21).float(message.Y);
            if (message.Z != null && message.hasOwnProperty("Z"))
                writer.uint32(/* id 3, wireType 5 =*/29).float(message.Z);
            return writer;
        };

        /**
         * Encodes the specified T_Vec3 message, length delimited. Does not implicitly {@link msg.T_Vec3.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_Vec3
         * @static
         * @param {msg.IT_Vec3} message T_Vec3 message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Vec3.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_Vec3 message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_Vec3
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_Vec3} T_Vec3
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Vec3.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_Vec3();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.X = reader.float();
                    break;
                case 2:
                    message.Y = reader.float();
                    break;
                case 3:
                    message.Z = reader.float();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_Vec3 message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_Vec3
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_Vec3} T_Vec3
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Vec3.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_Vec3 message.
         * @function verify
         * @memberof msg.T_Vec3
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_Vec3.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.X != null && message.hasOwnProperty("X"))
                if (typeof message.X !== "number")
                    return "X: number expected";
            if (message.Y != null && message.hasOwnProperty("Y"))
                if (typeof message.Y !== "number")
                    return "Y: number expected";
            if (message.Z != null && message.hasOwnProperty("Z"))
                if (typeof message.Z !== "number")
                    return "Z: number expected";
            return null;
        };

        /**
         * Creates a T_Vec3 message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_Vec3
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_Vec3} T_Vec3
         */
        T_Vec3.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_Vec3)
                return object;
            var message = new $root.msg.T_Vec3();
            if (object.X != null)
                message.X = Number(object.X);
            if (object.Y != null)
                message.Y = Number(object.Y);
            if (object.Z != null)
                message.Z = Number(object.Z);
            return message;
        };

        /**
         * Creates a plain object from a T_Vec3 message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_Vec3
         * @static
         * @param {msg.T_Vec3} message T_Vec3
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_Vec3.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.X = 0;
                object.Y = 0;
                object.Z = 0;
            }
            if (message.X != null && message.hasOwnProperty("X"))
                object.X = options.json && !isFinite(message.X) ? String(message.X) : message.X;
            if (message.Y != null && message.hasOwnProperty("Y"))
                object.Y = options.json && !isFinite(message.Y) ? String(message.Y) : message.Y;
            if (message.Z != null && message.hasOwnProperty("Z"))
                object.Z = options.json && !isFinite(message.Z) ? String(message.Z) : message.Z;
            return object;
        };

        /**
         * Converts this T_Vec3 to JSON.
         * @function toJSON
         * @memberof msg.T_Vec3
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_Vec3.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_Vec3;
    })();

    msg.T_Vec2 = (function() {

        /**
         * Properties of a T_Vec2.
         * @memberof msg
         * @interface IT_Vec2
         * @property {number|null} [X] T_Vec2 X
         * @property {number|null} [Y] T_Vec2 Y
         */

        /**
         * Constructs a new T_Vec2.
         * @memberof msg
         * @classdesc Represents a T_Vec2.
         * @implements IT_Vec2
         * @constructor
         * @param {msg.IT_Vec2=} [properties] Properties to set
         */
        function T_Vec2(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * T_Vec2 X.
         * @member {number} X
         * @memberof msg.T_Vec2
         * @instance
         */
        T_Vec2.prototype.X = 0;

        /**
         * T_Vec2 Y.
         * @member {number} Y
         * @memberof msg.T_Vec2
         * @instance
         */
        T_Vec2.prototype.Y = 0;

        /**
         * Creates a new T_Vec2 instance using the specified properties.
         * @function create
         * @memberof msg.T_Vec2
         * @static
         * @param {msg.IT_Vec2=} [properties] Properties to set
         * @returns {msg.T_Vec2} T_Vec2 instance
         */
        T_Vec2.create = function create(properties) {
            return new T_Vec2(properties);
        };

        /**
         * Encodes the specified T_Vec2 message. Does not implicitly {@link msg.T_Vec2.verify|verify} messages.
         * @function encode
         * @memberof msg.T_Vec2
         * @static
         * @param {msg.IT_Vec2} message T_Vec2 message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Vec2.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.X != null && message.hasOwnProperty("X"))
                writer.uint32(/* id 1, wireType 5 =*/13).float(message.X);
            if (message.Y != null && message.hasOwnProperty("Y"))
                writer.uint32(/* id 2, wireType 5 =*/21).float(message.Y);
            return writer;
        };

        /**
         * Encodes the specified T_Vec2 message, length delimited. Does not implicitly {@link msg.T_Vec2.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_Vec2
         * @static
         * @param {msg.IT_Vec2} message T_Vec2 message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Vec2.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_Vec2 message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_Vec2
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_Vec2} T_Vec2
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Vec2.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_Vec2();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.X = reader.float();
                    break;
                case 2:
                    message.Y = reader.float();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_Vec2 message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_Vec2
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_Vec2} T_Vec2
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Vec2.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_Vec2 message.
         * @function verify
         * @memberof msg.T_Vec2
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_Vec2.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.X != null && message.hasOwnProperty("X"))
                if (typeof message.X !== "number")
                    return "X: number expected";
            if (message.Y != null && message.hasOwnProperty("Y"))
                if (typeof message.Y !== "number")
                    return "Y: number expected";
            return null;
        };

        /**
         * Creates a T_Vec2 message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_Vec2
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_Vec2} T_Vec2
         */
        T_Vec2.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_Vec2)
                return object;
            var message = new $root.msg.T_Vec2();
            if (object.X != null)
                message.X = Number(object.X);
            if (object.Y != null)
                message.Y = Number(object.Y);
            return message;
        };

        /**
         * Creates a plain object from a T_Vec2 message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_Vec2
         * @static
         * @param {msg.T_Vec2} message T_Vec2
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_Vec2.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.X = 0;
                object.Y = 0;
            }
            if (message.X != null && message.hasOwnProperty("X"))
                object.X = options.json && !isFinite(message.X) ? String(message.X) : message.X;
            if (message.Y != null && message.hasOwnProperty("Y"))
                object.Y = options.json && !isFinite(message.Y) ? String(message.Y) : message.Y;
            return object;
        };

        /**
         * Converts this T_Vec2 to JSON.
         * @function toJSON
         * @memberof msg.T_Vec2
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_Vec2.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_Vec2;
    })();

    msg.T_Quat = (function() {

        /**
         * Properties of a T_Quat.
         * @memberof msg
         * @interface IT_Quat
         * @property {number|null} [X] T_Quat X
         * @property {number|null} [Y] T_Quat Y
         * @property {number|null} [Z] T_Quat Z
         * @property {number|null} [W] T_Quat W
         */

        /**
         * Constructs a new T_Quat.
         * @memberof msg
         * @classdesc Represents a T_Quat.
         * @implements IT_Quat
         * @constructor
         * @param {msg.IT_Quat=} [properties] Properties to set
         */
        function T_Quat(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * T_Quat X.
         * @member {number} X
         * @memberof msg.T_Quat
         * @instance
         */
        T_Quat.prototype.X = 0;

        /**
         * T_Quat Y.
         * @member {number} Y
         * @memberof msg.T_Quat
         * @instance
         */
        T_Quat.prototype.Y = 0;

        /**
         * T_Quat Z.
         * @member {number} Z
         * @memberof msg.T_Quat
         * @instance
         */
        T_Quat.prototype.Z = 0;

        /**
         * T_Quat W.
         * @member {number} W
         * @memberof msg.T_Quat
         * @instance
         */
        T_Quat.prototype.W = 0;

        /**
         * Creates a new T_Quat instance using the specified properties.
         * @function create
         * @memberof msg.T_Quat
         * @static
         * @param {msg.IT_Quat=} [properties] Properties to set
         * @returns {msg.T_Quat} T_Quat instance
         */
        T_Quat.create = function create(properties) {
            return new T_Quat(properties);
        };

        /**
         * Encodes the specified T_Quat message. Does not implicitly {@link msg.T_Quat.verify|verify} messages.
         * @function encode
         * @memberof msg.T_Quat
         * @static
         * @param {msg.IT_Quat} message T_Quat message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Quat.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.X != null && message.hasOwnProperty("X"))
                writer.uint32(/* id 1, wireType 5 =*/13).float(message.X);
            if (message.Y != null && message.hasOwnProperty("Y"))
                writer.uint32(/* id 2, wireType 5 =*/21).float(message.Y);
            if (message.Z != null && message.hasOwnProperty("Z"))
                writer.uint32(/* id 3, wireType 5 =*/29).float(message.Z);
            if (message.W != null && message.hasOwnProperty("W"))
                writer.uint32(/* id 4, wireType 5 =*/37).float(message.W);
            return writer;
        };

        /**
         * Encodes the specified T_Quat message, length delimited. Does not implicitly {@link msg.T_Quat.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_Quat
         * @static
         * @param {msg.IT_Quat} message T_Quat message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Quat.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_Quat message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_Quat
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_Quat} T_Quat
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Quat.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_Quat();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.X = reader.float();
                    break;
                case 2:
                    message.Y = reader.float();
                    break;
                case 3:
                    message.Z = reader.float();
                    break;
                case 4:
                    message.W = reader.float();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_Quat message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_Quat
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_Quat} T_Quat
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Quat.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_Quat message.
         * @function verify
         * @memberof msg.T_Quat
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_Quat.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.X != null && message.hasOwnProperty("X"))
                if (typeof message.X !== "number")
                    return "X: number expected";
            if (message.Y != null && message.hasOwnProperty("Y"))
                if (typeof message.Y !== "number")
                    return "Y: number expected";
            if (message.Z != null && message.hasOwnProperty("Z"))
                if (typeof message.Z !== "number")
                    return "Z: number expected";
            if (message.W != null && message.hasOwnProperty("W"))
                if (typeof message.W !== "number")
                    return "W: number expected";
            return null;
        };

        /**
         * Creates a T_Quat message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_Quat
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_Quat} T_Quat
         */
        T_Quat.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_Quat)
                return object;
            var message = new $root.msg.T_Quat();
            if (object.X != null)
                message.X = Number(object.X);
            if (object.Y != null)
                message.Y = Number(object.Y);
            if (object.Z != null)
                message.Z = Number(object.Z);
            if (object.W != null)
                message.W = Number(object.W);
            return message;
        };

        /**
         * Creates a plain object from a T_Quat message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_Quat
         * @static
         * @param {msg.T_Quat} message T_Quat
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_Quat.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.X = 0;
                object.Y = 0;
                object.Z = 0;
                object.W = 0;
            }
            if (message.X != null && message.hasOwnProperty("X"))
                object.X = options.json && !isFinite(message.X) ? String(message.X) : message.X;
            if (message.Y != null && message.hasOwnProperty("Y"))
                object.Y = options.json && !isFinite(message.Y) ? String(message.Y) : message.Y;
            if (message.Z != null && message.hasOwnProperty("Z"))
                object.Z = options.json && !isFinite(message.Z) ? String(message.Z) : message.Z;
            if (message.W != null && message.hasOwnProperty("W"))
                object.W = options.json && !isFinite(message.W) ? String(message.W) : message.W;
            return object;
        };

        /**
         * Converts this T_Quat to JSON.
         * @function toJSON
         * @memberof msg.T_Quat
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_Quat.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_Quat;
    })();

    msg.T_Transform = (function() {

        /**
         * Properties of a T_Transform.
         * @memberof msg
         * @interface IT_Transform
         * @property {msg.IT_Vec3|null} [P] T_Transform P
         * @property {msg.IT_Quat|null} [Q] T_Transform Q
         */

        /**
         * Constructs a new T_Transform.
         * @memberof msg
         * @classdesc Represents a T_Transform.
         * @implements IT_Transform
         * @constructor
         * @param {msg.IT_Transform=} [properties] Properties to set
         */
        function T_Transform(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * T_Transform P.
         * @member {msg.IT_Vec3|null|undefined} P
         * @memberof msg.T_Transform
         * @instance
         */
        T_Transform.prototype.P = null;

        /**
         * T_Transform Q.
         * @member {msg.IT_Quat|null|undefined} Q
         * @memberof msg.T_Transform
         * @instance
         */
        T_Transform.prototype.Q = null;

        /**
         * Creates a new T_Transform instance using the specified properties.
         * @function create
         * @memberof msg.T_Transform
         * @static
         * @param {msg.IT_Transform=} [properties] Properties to set
         * @returns {msg.T_Transform} T_Transform instance
         */
        T_Transform.create = function create(properties) {
            return new T_Transform(properties);
        };

        /**
         * Encodes the specified T_Transform message. Does not implicitly {@link msg.T_Transform.verify|verify} messages.
         * @function encode
         * @memberof msg.T_Transform
         * @static
         * @param {msg.IT_Transform} message T_Transform message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Transform.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.P != null && message.hasOwnProperty("P"))
                $root.msg.T_Vec3.encode(message.P, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.Q != null && message.hasOwnProperty("Q"))
                $root.msg.T_Quat.encode(message.Q, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified T_Transform message, length delimited. Does not implicitly {@link msg.T_Transform.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_Transform
         * @static
         * @param {msg.IT_Transform} message T_Transform message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_Transform.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_Transform message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_Transform
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_Transform} T_Transform
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Transform.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_Transform();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.P = $root.msg.T_Vec3.decode(reader, reader.uint32());
                    break;
                case 2:
                    message.Q = $root.msg.T_Quat.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_Transform message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_Transform
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_Transform} T_Transform
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_Transform.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_Transform message.
         * @function verify
         * @memberof msg.T_Transform
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_Transform.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.P != null && message.hasOwnProperty("P")) {
                var error = $root.msg.T_Vec3.verify(message.P);
                if (error)
                    return "P." + error;
            }
            if (message.Q != null && message.hasOwnProperty("Q")) {
                var error = $root.msg.T_Quat.verify(message.Q);
                if (error)
                    return "Q." + error;
            }
            return null;
        };

        /**
         * Creates a T_Transform message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_Transform
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_Transform} T_Transform
         */
        T_Transform.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_Transform)
                return object;
            var message = new $root.msg.T_Transform();
            if (object.P != null) {
                if (typeof object.P !== "object")
                    throw TypeError(".msg.T_Transform.P: object expected");
                message.P = $root.msg.T_Vec3.fromObject(object.P);
            }
            if (object.Q != null) {
                if (typeof object.Q !== "object")
                    throw TypeError(".msg.T_Transform.Q: object expected");
                message.Q = $root.msg.T_Quat.fromObject(object.Q);
            }
            return message;
        };

        /**
         * Creates a plain object from a T_Transform message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_Transform
         * @static
         * @param {msg.T_Transform} message T_Transform
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_Transform.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.P = null;
                object.Q = null;
            }
            if (message.P != null && message.hasOwnProperty("P"))
                object.P = $root.msg.T_Vec3.toObject(message.P, options);
            if (message.Q != null && message.hasOwnProperty("Q"))
                object.Q = $root.msg.T_Quat.toObject(message.Q, options);
            return object;
        };

        /**
         * Converts this T_Transform to JSON.
         * @function toJSON
         * @memberof msg.T_Transform
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_Transform.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_Transform;
    })();

    msg.T_GameUserData = (function() {

        /**
         * Properties of a T_GameUserData.
         * @memberof msg
         * @interface IT_GameUserData
         * @property {number|Long|null} [UserID] T_GameUserData UserID
         * @property {number|Long|null} [TeamID] T_GameUserData TeamID
         * @property {msg.IT_Transform|null} [Pos] T_GameUserData Pos
         * @property {number|null} [Raduis] T_GameUserData Raduis
         */

        /**
         * Constructs a new T_GameUserData.
         * @memberof msg
         * @classdesc Represents a T_GameUserData.
         * @implements IT_GameUserData
         * @constructor
         * @param {msg.IT_GameUserData=} [properties] Properties to set
         */
        function T_GameUserData(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * T_GameUserData UserID.
         * @member {number|Long} UserID
         * @memberof msg.T_GameUserData
         * @instance
         */
        T_GameUserData.prototype.UserID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * T_GameUserData TeamID.
         * @member {number|Long} TeamID
         * @memberof msg.T_GameUserData
         * @instance
         */
        T_GameUserData.prototype.TeamID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * T_GameUserData Pos.
         * @member {msg.IT_Transform|null|undefined} Pos
         * @memberof msg.T_GameUserData
         * @instance
         */
        T_GameUserData.prototype.Pos = null;

        /**
         * T_GameUserData Raduis.
         * @member {number} Raduis
         * @memberof msg.T_GameUserData
         * @instance
         */
        T_GameUserData.prototype.Raduis = 0;

        /**
         * Creates a new T_GameUserData instance using the specified properties.
         * @function create
         * @memberof msg.T_GameUserData
         * @static
         * @param {msg.IT_GameUserData=} [properties] Properties to set
         * @returns {msg.T_GameUserData} T_GameUserData instance
         */
        T_GameUserData.create = function create(properties) {
            return new T_GameUserData(properties);
        };

        /**
         * Encodes the specified T_GameUserData message. Does not implicitly {@link msg.T_GameUserData.verify|verify} messages.
         * @function encode
         * @memberof msg.T_GameUserData
         * @static
         * @param {msg.IT_GameUserData} message T_GameUserData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_GameUserData.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.UserID);
            if (message.TeamID != null && message.hasOwnProperty("TeamID"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.TeamID);
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                $root.msg.T_Transform.encode(message.Pos, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            if (message.Raduis != null && message.hasOwnProperty("Raduis"))
                writer.uint32(/* id 4, wireType 5 =*/37).float(message.Raduis);
            return writer;
        };

        /**
         * Encodes the specified T_GameUserData message, length delimited. Does not implicitly {@link msg.T_GameUserData.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_GameUserData
         * @static
         * @param {msg.IT_GameUserData} message T_GameUserData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_GameUserData.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_GameUserData message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_GameUserData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_GameUserData} T_GameUserData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_GameUserData.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_GameUserData();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.UserID = reader.uint64();
                    break;
                case 2:
                    message.TeamID = reader.uint64();
                    break;
                case 3:
                    message.Pos = $root.msg.T_Transform.decode(reader, reader.uint32());
                    break;
                case 4:
                    message.Raduis = reader.float();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_GameUserData message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_GameUserData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_GameUserData} T_GameUserData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_GameUserData.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_GameUserData message.
         * @function verify
         * @memberof msg.T_GameUserData
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_GameUserData.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (!$util.isInteger(message.UserID) && !(message.UserID && $util.isInteger(message.UserID.low) && $util.isInteger(message.UserID.high)))
                    return "UserID: integer|Long expected";
            if (message.TeamID != null && message.hasOwnProperty("TeamID"))
                if (!$util.isInteger(message.TeamID) && !(message.TeamID && $util.isInteger(message.TeamID.low) && $util.isInteger(message.TeamID.high)))
                    return "TeamID: integer|Long expected";
            if (message.Pos != null && message.hasOwnProperty("Pos")) {
                var error = $root.msg.T_Transform.verify(message.Pos);
                if (error)
                    return "Pos." + error;
            }
            if (message.Raduis != null && message.hasOwnProperty("Raduis"))
                if (typeof message.Raduis !== "number")
                    return "Raduis: number expected";
            return null;
        };

        /**
         * Creates a T_GameUserData message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_GameUserData
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_GameUserData} T_GameUserData
         */
        T_GameUserData.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_GameUserData)
                return object;
            var message = new $root.msg.T_GameUserData();
            if (object.UserID != null)
                if ($util.Long)
                    (message.UserID = $util.Long.fromValue(object.UserID)).unsigned = true;
                else if (typeof object.UserID === "string")
                    message.UserID = parseInt(object.UserID, 10);
                else if (typeof object.UserID === "number")
                    message.UserID = object.UserID;
                else if (typeof object.UserID === "object")
                    message.UserID = new $util.LongBits(object.UserID.low >>> 0, object.UserID.high >>> 0).toNumber(true);
            if (object.TeamID != null)
                if ($util.Long)
                    (message.TeamID = $util.Long.fromValue(object.TeamID)).unsigned = true;
                else if (typeof object.TeamID === "string")
                    message.TeamID = parseInt(object.TeamID, 10);
                else if (typeof object.TeamID === "number")
                    message.TeamID = object.TeamID;
                else if (typeof object.TeamID === "object")
                    message.TeamID = new $util.LongBits(object.TeamID.low >>> 0, object.TeamID.high >>> 0).toNumber(true);
            if (object.Pos != null) {
                if (typeof object.Pos !== "object")
                    throw TypeError(".msg.T_GameUserData.Pos: object expected");
                message.Pos = $root.msg.T_Transform.fromObject(object.Pos);
            }
            if (object.Raduis != null)
                message.Raduis = Number(object.Raduis);
            return message;
        };

        /**
         * Creates a plain object from a T_GameUserData message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_GameUserData
         * @static
         * @param {msg.T_GameUserData} message T_GameUserData
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_GameUserData.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.UserID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.UserID = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.TeamID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.TeamID = options.longs === String ? "0" : 0;
                object.Pos = null;
                object.Raduis = 0;
            }
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (typeof message.UserID === "number")
                    object.UserID = options.longs === String ? String(message.UserID) : message.UserID;
                else
                    object.UserID = options.longs === String ? $util.Long.prototype.toString.call(message.UserID) : options.longs === Number ? new $util.LongBits(message.UserID.low >>> 0, message.UserID.high >>> 0).toNumber(true) : message.UserID;
            if (message.TeamID != null && message.hasOwnProperty("TeamID"))
                if (typeof message.TeamID === "number")
                    object.TeamID = options.longs === String ? String(message.TeamID) : message.TeamID;
                else
                    object.TeamID = options.longs === String ? $util.Long.prototype.toString.call(message.TeamID) : options.longs === Number ? new $util.LongBits(message.TeamID.low >>> 0, message.TeamID.high >>> 0).toNumber(true) : message.TeamID;
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                object.Pos = $root.msg.T_Transform.toObject(message.Pos, options);
            if (message.Raduis != null && message.hasOwnProperty("Raduis"))
                object.Raduis = options.json && !isFinite(message.Raduis) ? String(message.Raduis) : message.Raduis;
            return object;
        };

        /**
         * Converts this T_GameUserData to JSON.
         * @function toJSON
         * @memberof msg.T_GameUserData
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_GameUserData.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_GameUserData;
    })();

    msg.T_GameData = (function() {

        /**
         * Properties of a T_GameData.
         * @memberof msg
         * @interface IT_GameData
         */

        /**
         * Constructs a new T_GameData.
         * @memberof msg
         * @classdesc Represents a T_GameData.
         * @implements IT_GameData
         * @constructor
         * @param {msg.IT_GameData=} [properties] Properties to set
         */
        function T_GameData(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new T_GameData instance using the specified properties.
         * @function create
         * @memberof msg.T_GameData
         * @static
         * @param {msg.IT_GameData=} [properties] Properties to set
         * @returns {msg.T_GameData} T_GameData instance
         */
        T_GameData.create = function create(properties) {
            return new T_GameData(properties);
        };

        /**
         * Encodes the specified T_GameData message. Does not implicitly {@link msg.T_GameData.verify|verify} messages.
         * @function encode
         * @memberof msg.T_GameData
         * @static
         * @param {msg.IT_GameData} message T_GameData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_GameData.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified T_GameData message, length delimited. Does not implicitly {@link msg.T_GameData.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.T_GameData
         * @static
         * @param {msg.IT_GameData} message T_GameData message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        T_GameData.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a T_GameData message from the specified reader or buffer.
         * @function decode
         * @memberof msg.T_GameData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.T_GameData} T_GameData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_GameData.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_GameData();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a T_GameData message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.T_GameData
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.T_GameData} T_GameData
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        T_GameData.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a T_GameData message.
         * @function verify
         * @memberof msg.T_GameData
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        T_GameData.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a T_GameData message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.T_GameData
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.T_GameData} T_GameData
         */
        T_GameData.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.T_GameData)
                return object;
            return new $root.msg.T_GameData();
        };

        /**
         * Creates a plain object from a T_GameData message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.T_GameData
         * @static
         * @param {msg.T_GameData} message T_GameData
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        T_GameData.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this T_GameData to JSON.
         * @function toJSON
         * @memberof msg.T_GameData
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        T_GameData.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return T_GameData;
    })();

    msg.MSG_PingGameService = (function() {

        /**
         * Properties of a MSG_PingGameService.
         * @memberof msg
         * @interface IMSG_PingGameService
         * @property {number|Long|null} [timeStamp] MSG_PingGameService timeStamp
         */

        /**
         * Constructs a new MSG_PingGameService.
         * @memberof msg
         * @classdesc Represents a MSG_PingGameService.
         * @implements IMSG_PingGameService
         * @constructor
         * @param {msg.IMSG_PingGameService=} [properties] Properties to set
         */
        function MSG_PingGameService(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_PingGameService timeStamp.
         * @member {number|Long} timeStamp
         * @memberof msg.MSG_PingGameService
         * @instance
         */
        MSG_PingGameService.prototype.timeStamp = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new MSG_PingGameService instance using the specified properties.
         * @function create
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {msg.IMSG_PingGameService=} [properties] Properties to set
         * @returns {msg.MSG_PingGameService} MSG_PingGameService instance
         */
        MSG_PingGameService.create = function create(properties) {
            return new MSG_PingGameService(properties);
        };

        /**
         * Encodes the specified MSG_PingGameService message. Does not implicitly {@link msg.MSG_PingGameService.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {msg.IMSG_PingGameService} message MSG_PingGameService message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_PingGameService.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.timeStamp != null && message.hasOwnProperty("timeStamp"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.timeStamp);
            return writer;
        };

        /**
         * Encodes the specified MSG_PingGameService message, length delimited. Does not implicitly {@link msg.MSG_PingGameService.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {msg.IMSG_PingGameService} message MSG_PingGameService message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_PingGameService.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_PingGameService message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_PingGameService} MSG_PingGameService
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_PingGameService.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_PingGameService();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.timeStamp = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_PingGameService message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_PingGameService} MSG_PingGameService
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_PingGameService.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_PingGameService message.
         * @function verify
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_PingGameService.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.timeStamp != null && message.hasOwnProperty("timeStamp"))
                if (!$util.isInteger(message.timeStamp) && !(message.timeStamp && $util.isInteger(message.timeStamp.low) && $util.isInteger(message.timeStamp.high)))
                    return "timeStamp: integer|Long expected";
            return null;
        };

        /**
         * Creates a MSG_PingGameService message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_PingGameService} MSG_PingGameService
         */
        MSG_PingGameService.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_PingGameService)
                return object;
            var message = new $root.msg.MSG_PingGameService();
            if (object.timeStamp != null)
                if ($util.Long)
                    (message.timeStamp = $util.Long.fromValue(object.timeStamp)).unsigned = true;
                else if (typeof object.timeStamp === "string")
                    message.timeStamp = parseInt(object.timeStamp, 10);
                else if (typeof object.timeStamp === "number")
                    message.timeStamp = object.timeStamp;
                else if (typeof object.timeStamp === "object")
                    message.timeStamp = new $util.LongBits(object.timeStamp.low >>> 0, object.timeStamp.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a MSG_PingGameService message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_PingGameService
         * @static
         * @param {msg.MSG_PingGameService} message MSG_PingGameService
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_PingGameService.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.timeStamp = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.timeStamp = options.longs === String ? "0" : 0;
            if (message.timeStamp != null && message.hasOwnProperty("timeStamp"))
                if (typeof message.timeStamp === "number")
                    object.timeStamp = options.longs === String ? String(message.timeStamp) : message.timeStamp;
                else
                    object.timeStamp = options.longs === String ? $util.Long.prototype.toString.call(message.timeStamp) : options.longs === Number ? new $util.LongBits(message.timeStamp.low >>> 0, message.timeStamp.high >>> 0).toNumber(true) : message.timeStamp;
            return object;
        };

        /**
         * Converts this MSG_PingGameService to JSON.
         * @function toJSON
         * @memberof msg.MSG_PingGameService
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_PingGameService.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_PingGameService;
    })();

    msg.MSG_PongGameService = (function() {

        /**
         * Properties of a MSG_PongGameService.
         * @memberof msg
         * @interface IMSG_PongGameService
         * @property {msg.IMSG_PingGameService|null} [data] MSG_PongGameService data
         * @property {number|Long|null} [serverTime] MSG_PongGameService serverTime
         */

        /**
         * Constructs a new MSG_PongGameService.
         * @memberof msg
         * @classdesc Represents a MSG_PongGameService.
         * @implements IMSG_PongGameService
         * @constructor
         * @param {msg.IMSG_PongGameService=} [properties] Properties to set
         */
        function MSG_PongGameService(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_PongGameService data.
         * @member {msg.IMSG_PingGameService|null|undefined} data
         * @memberof msg.MSG_PongGameService
         * @instance
         */
        MSG_PongGameService.prototype.data = null;

        /**
         * MSG_PongGameService serverTime.
         * @member {number|Long} serverTime
         * @memberof msg.MSG_PongGameService
         * @instance
         */
        MSG_PongGameService.prototype.serverTime = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new MSG_PongGameService instance using the specified properties.
         * @function create
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {msg.IMSG_PongGameService=} [properties] Properties to set
         * @returns {msg.MSG_PongGameService} MSG_PongGameService instance
         */
        MSG_PongGameService.create = function create(properties) {
            return new MSG_PongGameService(properties);
        };

        /**
         * Encodes the specified MSG_PongGameService message. Does not implicitly {@link msg.MSG_PongGameService.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {msg.IMSG_PongGameService} message MSG_PongGameService message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_PongGameService.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.data != null && message.hasOwnProperty("data"))
                $root.msg.MSG_PingGameService.encode(message.data, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.serverTime != null && message.hasOwnProperty("serverTime"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.serverTime);
            return writer;
        };

        /**
         * Encodes the specified MSG_PongGameService message, length delimited. Does not implicitly {@link msg.MSG_PongGameService.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {msg.IMSG_PongGameService} message MSG_PongGameService message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_PongGameService.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_PongGameService message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_PongGameService} MSG_PongGameService
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_PongGameService.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_PongGameService();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.data = $root.msg.MSG_PingGameService.decode(reader, reader.uint32());
                    break;
                case 2:
                    message.serverTime = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_PongGameService message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_PongGameService} MSG_PongGameService
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_PongGameService.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_PongGameService message.
         * @function verify
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_PongGameService.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                var error = $root.msg.MSG_PingGameService.verify(message.data);
                if (error)
                    return "data." + error;
            }
            if (message.serverTime != null && message.hasOwnProperty("serverTime"))
                if (!$util.isInteger(message.serverTime) && !(message.serverTime && $util.isInteger(message.serverTime.low) && $util.isInteger(message.serverTime.high)))
                    return "serverTime: integer|Long expected";
            return null;
        };

        /**
         * Creates a MSG_PongGameService message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_PongGameService} MSG_PongGameService
         */
        MSG_PongGameService.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_PongGameService)
                return object;
            var message = new $root.msg.MSG_PongGameService();
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".msg.MSG_PongGameService.data: object expected");
                message.data = $root.msg.MSG_PingGameService.fromObject(object.data);
            }
            if (object.serverTime != null)
                if ($util.Long)
                    (message.serverTime = $util.Long.fromValue(object.serverTime)).unsigned = true;
                else if (typeof object.serverTime === "string")
                    message.serverTime = parseInt(object.serverTime, 10);
                else if (typeof object.serverTime === "number")
                    message.serverTime = object.serverTime;
                else if (typeof object.serverTime === "object")
                    message.serverTime = new $util.LongBits(object.serverTime.low >>> 0, object.serverTime.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a MSG_PongGameService message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_PongGameService
         * @static
         * @param {msg.MSG_PongGameService} message MSG_PongGameService
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_PongGameService.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.data = null;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.serverTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.serverTime = options.longs === String ? "0" : 0;
            }
            if (message.data != null && message.hasOwnProperty("data"))
                object.data = $root.msg.MSG_PingGameService.toObject(message.data, options);
            if (message.serverTime != null && message.hasOwnProperty("serverTime"))
                if (typeof message.serverTime === "number")
                    object.serverTime = options.longs === String ? String(message.serverTime) : message.serverTime;
                else
                    object.serverTime = options.longs === String ? $util.Long.prototype.toString.call(message.serverTime) : options.longs === Number ? new $util.LongBits(message.serverTime.low >>> 0, message.serverTime.high >>> 0).toNumber(true) : message.serverTime;
            return object;
        };

        /**
         * Converts this MSG_PongGameService to JSON.
         * @function toJSON
         * @memberof msg.MSG_PongGameService
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_PongGameService.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_PongGameService;
    })();

    msg.MSG_QuickStarGame_CS = (function() {

        /**
         * Properties of a MSG_QuickStarGame_CS.
         * @memberof msg
         * @interface IMSG_QuickStarGame_CS
         */

        /**
         * Constructs a new MSG_QuickStarGame_CS.
         * @memberof msg
         * @classdesc Represents a MSG_QuickStarGame_CS.
         * @implements IMSG_QuickStarGame_CS
         * @constructor
         * @param {msg.IMSG_QuickStarGame_CS=} [properties] Properties to set
         */
        function MSG_QuickStarGame_CS(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new MSG_QuickStarGame_CS instance using the specified properties.
         * @function create
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {msg.IMSG_QuickStarGame_CS=} [properties] Properties to set
         * @returns {msg.MSG_QuickStarGame_CS} MSG_QuickStarGame_CS instance
         */
        MSG_QuickStarGame_CS.create = function create(properties) {
            return new MSG_QuickStarGame_CS(properties);
        };

        /**
         * Encodes the specified MSG_QuickStarGame_CS message. Does not implicitly {@link msg.MSG_QuickStarGame_CS.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {msg.IMSG_QuickStarGame_CS} message MSG_QuickStarGame_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_QuickStarGame_CS.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified MSG_QuickStarGame_CS message, length delimited. Does not implicitly {@link msg.MSG_QuickStarGame_CS.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {msg.IMSG_QuickStarGame_CS} message MSG_QuickStarGame_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_QuickStarGame_CS.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_QuickStarGame_CS message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_QuickStarGame_CS} MSG_QuickStarGame_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_QuickStarGame_CS.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_QuickStarGame_CS();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_QuickStarGame_CS message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_QuickStarGame_CS} MSG_QuickStarGame_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_QuickStarGame_CS.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_QuickStarGame_CS message.
         * @function verify
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_QuickStarGame_CS.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a MSG_QuickStarGame_CS message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_QuickStarGame_CS} MSG_QuickStarGame_CS
         */
        MSG_QuickStarGame_CS.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_QuickStarGame_CS)
                return object;
            return new $root.msg.MSG_QuickStarGame_CS();
        };

        /**
         * Creates a plain object from a MSG_QuickStarGame_CS message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_QuickStarGame_CS
         * @static
         * @param {msg.MSG_QuickStarGame_CS} message MSG_QuickStarGame_CS
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_QuickStarGame_CS.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this MSG_QuickStarGame_CS to JSON.
         * @function toJSON
         * @memberof msg.MSG_QuickStarGame_CS
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_QuickStarGame_CS.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_QuickStarGame_CS;
    })();

    msg.MSG_QuickStarGame_SC = (function() {

        /**
         * Properties of a MSG_QuickStarGame_SC.
         * @memberof msg
         * @interface IMSG_QuickStarGame_SC
         * @property {boolean|null} [StartOk] MSG_QuickStarGame_SC StartOk
         * @property {number|Long|null} [RoomID] MSG_QuickStarGame_SC RoomID
         */

        /**
         * Constructs a new MSG_QuickStarGame_SC.
         * @memberof msg
         * @classdesc Represents a MSG_QuickStarGame_SC.
         * @implements IMSG_QuickStarGame_SC
         * @constructor
         * @param {msg.IMSG_QuickStarGame_SC=} [properties] Properties to set
         */
        function MSG_QuickStarGame_SC(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_QuickStarGame_SC StartOk.
         * @member {boolean} StartOk
         * @memberof msg.MSG_QuickStarGame_SC
         * @instance
         */
        MSG_QuickStarGame_SC.prototype.StartOk = false;

        /**
         * MSG_QuickStarGame_SC RoomID.
         * @member {number|Long} RoomID
         * @memberof msg.MSG_QuickStarGame_SC
         * @instance
         */
        MSG_QuickStarGame_SC.prototype.RoomID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new MSG_QuickStarGame_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {msg.IMSG_QuickStarGame_SC=} [properties] Properties to set
         * @returns {msg.MSG_QuickStarGame_SC} MSG_QuickStarGame_SC instance
         */
        MSG_QuickStarGame_SC.create = function create(properties) {
            return new MSG_QuickStarGame_SC(properties);
        };

        /**
         * Encodes the specified MSG_QuickStarGame_SC message. Does not implicitly {@link msg.MSG_QuickStarGame_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {msg.IMSG_QuickStarGame_SC} message MSG_QuickStarGame_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_QuickStarGame_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.StartOk != null && message.hasOwnProperty("StartOk"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.StartOk);
            if (message.RoomID != null && message.hasOwnProperty("RoomID"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.RoomID);
            return writer;
        };

        /**
         * Encodes the specified MSG_QuickStarGame_SC message, length delimited. Does not implicitly {@link msg.MSG_QuickStarGame_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {msg.IMSG_QuickStarGame_SC} message MSG_QuickStarGame_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_QuickStarGame_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_QuickStarGame_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_QuickStarGame_SC} MSG_QuickStarGame_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_QuickStarGame_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_QuickStarGame_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.StartOk = reader.bool();
                    break;
                case 2:
                    message.RoomID = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_QuickStarGame_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_QuickStarGame_SC} MSG_QuickStarGame_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_QuickStarGame_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_QuickStarGame_SC message.
         * @function verify
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_QuickStarGame_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.StartOk != null && message.hasOwnProperty("StartOk"))
                if (typeof message.StartOk !== "boolean")
                    return "StartOk: boolean expected";
            if (message.RoomID != null && message.hasOwnProperty("RoomID"))
                if (!$util.isInteger(message.RoomID) && !(message.RoomID && $util.isInteger(message.RoomID.low) && $util.isInteger(message.RoomID.high)))
                    return "RoomID: integer|Long expected";
            return null;
        };

        /**
         * Creates a MSG_QuickStarGame_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_QuickStarGame_SC} MSG_QuickStarGame_SC
         */
        MSG_QuickStarGame_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_QuickStarGame_SC)
                return object;
            var message = new $root.msg.MSG_QuickStarGame_SC();
            if (object.StartOk != null)
                message.StartOk = Boolean(object.StartOk);
            if (object.RoomID != null)
                if ($util.Long)
                    (message.RoomID = $util.Long.fromValue(object.RoomID)).unsigned = true;
                else if (typeof object.RoomID === "string")
                    message.RoomID = parseInt(object.RoomID, 10);
                else if (typeof object.RoomID === "number")
                    message.RoomID = object.RoomID;
                else if (typeof object.RoomID === "object")
                    message.RoomID = new $util.LongBits(object.RoomID.low >>> 0, object.RoomID.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a MSG_QuickStarGame_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_QuickStarGame_SC
         * @static
         * @param {msg.MSG_QuickStarGame_SC} message MSG_QuickStarGame_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_QuickStarGame_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.StartOk = false;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.RoomID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.RoomID = options.longs === String ? "0" : 0;
            }
            if (message.StartOk != null && message.hasOwnProperty("StartOk"))
                object.StartOk = message.StartOk;
            if (message.RoomID != null && message.hasOwnProperty("RoomID"))
                if (typeof message.RoomID === "number")
                    object.RoomID = options.longs === String ? String(message.RoomID) : message.RoomID;
                else
                    object.RoomID = options.longs === String ? $util.Long.prototype.toString.call(message.RoomID) : options.longs === Number ? new $util.LongBits(message.RoomID.low >>> 0, message.RoomID.high >>> 0).toNumber(true) : message.RoomID;
            return object;
        };

        /**
         * Converts this MSG_QuickStarGame_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_QuickStarGame_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_QuickStarGame_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_QuickStarGame_SC;
    })();

    msg.MSG_JoinGame_CS = (function() {

        /**
         * Properties of a MSG_JoinGame_CS.
         * @memberof msg
         * @interface IMSG_JoinGame_CS
         */

        /**
         * Constructs a new MSG_JoinGame_CS.
         * @memberof msg
         * @classdesc Represents a MSG_JoinGame_CS.
         * @implements IMSG_JoinGame_CS
         * @constructor
         * @param {msg.IMSG_JoinGame_CS=} [properties] Properties to set
         */
        function MSG_JoinGame_CS(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new MSG_JoinGame_CS instance using the specified properties.
         * @function create
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {msg.IMSG_JoinGame_CS=} [properties] Properties to set
         * @returns {msg.MSG_JoinGame_CS} MSG_JoinGame_CS instance
         */
        MSG_JoinGame_CS.create = function create(properties) {
            return new MSG_JoinGame_CS(properties);
        };

        /**
         * Encodes the specified MSG_JoinGame_CS message. Does not implicitly {@link msg.MSG_JoinGame_CS.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {msg.IMSG_JoinGame_CS} message MSG_JoinGame_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_JoinGame_CS.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified MSG_JoinGame_CS message, length delimited. Does not implicitly {@link msg.MSG_JoinGame_CS.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {msg.IMSG_JoinGame_CS} message MSG_JoinGame_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_JoinGame_CS.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_JoinGame_CS message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_JoinGame_CS} MSG_JoinGame_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_JoinGame_CS.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_JoinGame_CS();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_JoinGame_CS message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_JoinGame_CS} MSG_JoinGame_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_JoinGame_CS.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_JoinGame_CS message.
         * @function verify
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_JoinGame_CS.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a MSG_JoinGame_CS message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_JoinGame_CS} MSG_JoinGame_CS
         */
        MSG_JoinGame_CS.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_JoinGame_CS)
                return object;
            return new $root.msg.MSG_JoinGame_CS();
        };

        /**
         * Creates a plain object from a MSG_JoinGame_CS message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_JoinGame_CS
         * @static
         * @param {msg.MSG_JoinGame_CS} message MSG_JoinGame_CS
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_JoinGame_CS.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this MSG_JoinGame_CS to JSON.
         * @function toJSON
         * @memberof msg.MSG_JoinGame_CS
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_JoinGame_CS.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_JoinGame_CS;
    })();

    msg.MSG_GameTerrainData_SC = (function() {

        /**
         * Properties of a MSG_GameTerrainData_SC.
         * @memberof msg
         * @interface IMSG_GameTerrainData_SC
         * @property {msg.IT_Transform|null} [Pos] MSG_GameTerrainData_SC Pos
         */

        /**
         * Constructs a new MSG_GameTerrainData_SC.
         * @memberof msg
         * @classdesc Represents a MSG_GameTerrainData_SC.
         * @implements IMSG_GameTerrainData_SC
         * @constructor
         * @param {msg.IMSG_GameTerrainData_SC=} [properties] Properties to set
         */
        function MSG_GameTerrainData_SC(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_GameTerrainData_SC Pos.
         * @member {msg.IT_Transform|null|undefined} Pos
         * @memberof msg.MSG_GameTerrainData_SC
         * @instance
         */
        MSG_GameTerrainData_SC.prototype.Pos = null;

        /**
         * Creates a new MSG_GameTerrainData_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {msg.IMSG_GameTerrainData_SC=} [properties] Properties to set
         * @returns {msg.MSG_GameTerrainData_SC} MSG_GameTerrainData_SC instance
         */
        MSG_GameTerrainData_SC.create = function create(properties) {
            return new MSG_GameTerrainData_SC(properties);
        };

        /**
         * Encodes the specified MSG_GameTerrainData_SC message. Does not implicitly {@link msg.MSG_GameTerrainData_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {msg.IMSG_GameTerrainData_SC} message MSG_GameTerrainData_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_GameTerrainData_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                $root.msg.T_Transform.encode(message.Pos, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MSG_GameTerrainData_SC message, length delimited. Does not implicitly {@link msg.MSG_GameTerrainData_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {msg.IMSG_GameTerrainData_SC} message MSG_GameTerrainData_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_GameTerrainData_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_GameTerrainData_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_GameTerrainData_SC} MSG_GameTerrainData_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_GameTerrainData_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_GameTerrainData_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.Pos = $root.msg.T_Transform.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_GameTerrainData_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_GameTerrainData_SC} MSG_GameTerrainData_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_GameTerrainData_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_GameTerrainData_SC message.
         * @function verify
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_GameTerrainData_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Pos != null && message.hasOwnProperty("Pos")) {
                var error = $root.msg.T_Transform.verify(message.Pos);
                if (error)
                    return "Pos." + error;
            }
            return null;
        };

        /**
         * Creates a MSG_GameTerrainData_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_GameTerrainData_SC} MSG_GameTerrainData_SC
         */
        MSG_GameTerrainData_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_GameTerrainData_SC)
                return object;
            var message = new $root.msg.MSG_GameTerrainData_SC();
            if (object.Pos != null) {
                if (typeof object.Pos !== "object")
                    throw TypeError(".msg.MSG_GameTerrainData_SC.Pos: object expected");
                message.Pos = $root.msg.T_Transform.fromObject(object.Pos);
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_GameTerrainData_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_GameTerrainData_SC
         * @static
         * @param {msg.MSG_GameTerrainData_SC} message MSG_GameTerrainData_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_GameTerrainData_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.Pos = null;
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                object.Pos = $root.msg.T_Transform.toObject(message.Pos, options);
            return object;
        };

        /**
         * Converts this MSG_GameTerrainData_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_GameTerrainData_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_GameTerrainData_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_GameTerrainData_SC;
    })();

    msg.MSG_GameUserData_SC = (function() {

        /**
         * Properties of a MSG_GameUserData_SC.
         * @memberof msg
         * @interface IMSG_GameUserData_SC
         * @property {number|Long|null} [ObjectID] MSG_GameUserData_SC ObjectID
         * @property {number|Long|null} [UserID] MSG_GameUserData_SC UserID
         * @property {msg.IT_Transform|null} [Pos] MSG_GameUserData_SC Pos
         * @property {msg.IT_Vec3|null} [Velocity] MSG_GameUserData_SC Velocity
         */

        /**
         * Constructs a new MSG_GameUserData_SC.
         * @memberof msg
         * @classdesc Represents a MSG_GameUserData_SC.
         * @implements IMSG_GameUserData_SC
         * @constructor
         * @param {msg.IMSG_GameUserData_SC=} [properties] Properties to set
         */
        function MSG_GameUserData_SC(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_GameUserData_SC ObjectID.
         * @member {number|Long} ObjectID
         * @memberof msg.MSG_GameUserData_SC
         * @instance
         */
        MSG_GameUserData_SC.prototype.ObjectID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_GameUserData_SC UserID.
         * @member {number|Long} UserID
         * @memberof msg.MSG_GameUserData_SC
         * @instance
         */
        MSG_GameUserData_SC.prototype.UserID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_GameUserData_SC Pos.
         * @member {msg.IT_Transform|null|undefined} Pos
         * @memberof msg.MSG_GameUserData_SC
         * @instance
         */
        MSG_GameUserData_SC.prototype.Pos = null;

        /**
         * MSG_GameUserData_SC Velocity.
         * @member {msg.IT_Vec3|null|undefined} Velocity
         * @memberof msg.MSG_GameUserData_SC
         * @instance
         */
        MSG_GameUserData_SC.prototype.Velocity = null;

        /**
         * Creates a new MSG_GameUserData_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {msg.IMSG_GameUserData_SC=} [properties] Properties to set
         * @returns {msg.MSG_GameUserData_SC} MSG_GameUserData_SC instance
         */
        MSG_GameUserData_SC.create = function create(properties) {
            return new MSG_GameUserData_SC(properties);
        };

        /**
         * Encodes the specified MSG_GameUserData_SC message. Does not implicitly {@link msg.MSG_GameUserData_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {msg.IMSG_GameUserData_SC} message MSG_GameUserData_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_GameUserData_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.ObjectID);
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.UserID);
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                $root.msg.T_Transform.encode(message.Pos, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            if (message.Velocity != null && message.hasOwnProperty("Velocity"))
                $root.msg.T_Vec3.encode(message.Velocity, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MSG_GameUserData_SC message, length delimited. Does not implicitly {@link msg.MSG_GameUserData_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {msg.IMSG_GameUserData_SC} message MSG_GameUserData_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_GameUserData_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_GameUserData_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_GameUserData_SC} MSG_GameUserData_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_GameUserData_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_GameUserData_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ObjectID = reader.uint64();
                    break;
                case 2:
                    message.UserID = reader.uint64();
                    break;
                case 3:
                    message.Pos = $root.msg.T_Transform.decode(reader, reader.uint32());
                    break;
                case 4:
                    message.Velocity = $root.msg.T_Vec3.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_GameUserData_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_GameUserData_SC} MSG_GameUserData_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_GameUserData_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_GameUserData_SC message.
         * @function verify
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_GameUserData_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (!$util.isInteger(message.ObjectID) && !(message.ObjectID && $util.isInteger(message.ObjectID.low) && $util.isInteger(message.ObjectID.high)))
                    return "ObjectID: integer|Long expected";
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (!$util.isInteger(message.UserID) && !(message.UserID && $util.isInteger(message.UserID.low) && $util.isInteger(message.UserID.high)))
                    return "UserID: integer|Long expected";
            if (message.Pos != null && message.hasOwnProperty("Pos")) {
                var error = $root.msg.T_Transform.verify(message.Pos);
                if (error)
                    return "Pos." + error;
            }
            if (message.Velocity != null && message.hasOwnProperty("Velocity")) {
                var error = $root.msg.T_Vec3.verify(message.Velocity);
                if (error)
                    return "Velocity." + error;
            }
            return null;
        };

        /**
         * Creates a MSG_GameUserData_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_GameUserData_SC} MSG_GameUserData_SC
         */
        MSG_GameUserData_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_GameUserData_SC)
                return object;
            var message = new $root.msg.MSG_GameUserData_SC();
            if (object.ObjectID != null)
                if ($util.Long)
                    (message.ObjectID = $util.Long.fromValue(object.ObjectID)).unsigned = true;
                else if (typeof object.ObjectID === "string")
                    message.ObjectID = parseInt(object.ObjectID, 10);
                else if (typeof object.ObjectID === "number")
                    message.ObjectID = object.ObjectID;
                else if (typeof object.ObjectID === "object")
                    message.ObjectID = new $util.LongBits(object.ObjectID.low >>> 0, object.ObjectID.high >>> 0).toNumber(true);
            if (object.UserID != null)
                if ($util.Long)
                    (message.UserID = $util.Long.fromValue(object.UserID)).unsigned = true;
                else if (typeof object.UserID === "string")
                    message.UserID = parseInt(object.UserID, 10);
                else if (typeof object.UserID === "number")
                    message.UserID = object.UserID;
                else if (typeof object.UserID === "object")
                    message.UserID = new $util.LongBits(object.UserID.low >>> 0, object.UserID.high >>> 0).toNumber(true);
            if (object.Pos != null) {
                if (typeof object.Pos !== "object")
                    throw TypeError(".msg.MSG_GameUserData_SC.Pos: object expected");
                message.Pos = $root.msg.T_Transform.fromObject(object.Pos);
            }
            if (object.Velocity != null) {
                if (typeof object.Velocity !== "object")
                    throw TypeError(".msg.MSG_GameUserData_SC.Velocity: object expected");
                message.Velocity = $root.msg.T_Vec3.fromObject(object.Velocity);
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_GameUserData_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_GameUserData_SC
         * @static
         * @param {msg.MSG_GameUserData_SC} message MSG_GameUserData_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_GameUserData_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.ObjectID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.ObjectID = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.UserID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.UserID = options.longs === String ? "0" : 0;
                object.Pos = null;
                object.Velocity = null;
            }
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (typeof message.ObjectID === "number")
                    object.ObjectID = options.longs === String ? String(message.ObjectID) : message.ObjectID;
                else
                    object.ObjectID = options.longs === String ? $util.Long.prototype.toString.call(message.ObjectID) : options.longs === Number ? new $util.LongBits(message.ObjectID.low >>> 0, message.ObjectID.high >>> 0).toNumber(true) : message.ObjectID;
            if (message.UserID != null && message.hasOwnProperty("UserID"))
                if (typeof message.UserID === "number")
                    object.UserID = options.longs === String ? String(message.UserID) : message.UserID;
                else
                    object.UserID = options.longs === String ? $util.Long.prototype.toString.call(message.UserID) : options.longs === Number ? new $util.LongBits(message.UserID.low >>> 0, message.UserID.high >>> 0).toNumber(true) : message.UserID;
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                object.Pos = $root.msg.T_Transform.toObject(message.Pos, options);
            if (message.Velocity != null && message.hasOwnProperty("Velocity"))
                object.Velocity = $root.msg.T_Vec3.toObject(message.Velocity, options);
            return object;
        };

        /**
         * Converts this MSG_GameUserData_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_GameUserData_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_GameUserData_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_GameUserData_SC;
    })();

    msg.MSG_GameData_SC = (function() {

        /**
         * Properties of a MSG_GameData_SC.
         * @memberof msg
         * @interface IMSG_GameData_SC
         * @property {number|Long|null} [GameID] MSG_GameData_SC GameID
         * @property {msg.IMSG_GameTerrainData_SC|null} [Terrain] MSG_GameData_SC Terrain
         * @property {Array.<msg.IMSG_GameUserData_SC>|null} [Users] MSG_GameData_SC Users
         */

        /**
         * Constructs a new MSG_GameData_SC.
         * @memberof msg
         * @classdesc Represents a MSG_GameData_SC.
         * @implements IMSG_GameData_SC
         * @constructor
         * @param {msg.IMSG_GameData_SC=} [properties] Properties to set
         */
        function MSG_GameData_SC(properties) {
            this.Users = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_GameData_SC GameID.
         * @member {number|Long} GameID
         * @memberof msg.MSG_GameData_SC
         * @instance
         */
        MSG_GameData_SC.prototype.GameID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_GameData_SC Terrain.
         * @member {msg.IMSG_GameTerrainData_SC|null|undefined} Terrain
         * @memberof msg.MSG_GameData_SC
         * @instance
         */
        MSG_GameData_SC.prototype.Terrain = null;

        /**
         * MSG_GameData_SC Users.
         * @member {Array.<msg.IMSG_GameUserData_SC>} Users
         * @memberof msg.MSG_GameData_SC
         * @instance
         */
        MSG_GameData_SC.prototype.Users = $util.emptyArray;

        /**
         * Creates a new MSG_GameData_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {msg.IMSG_GameData_SC=} [properties] Properties to set
         * @returns {msg.MSG_GameData_SC} MSG_GameData_SC instance
         */
        MSG_GameData_SC.create = function create(properties) {
            return new MSG_GameData_SC(properties);
        };

        /**
         * Encodes the specified MSG_GameData_SC message. Does not implicitly {@link msg.MSG_GameData_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {msg.IMSG_GameData_SC} message MSG_GameData_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_GameData_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.GameID != null && message.hasOwnProperty("GameID"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.GameID);
            if (message.Terrain != null && message.hasOwnProperty("Terrain"))
                $root.msg.MSG_GameTerrainData_SC.encode(message.Terrain, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.Users != null && message.Users.length)
                for (var i = 0; i < message.Users.length; ++i)
                    $root.msg.MSG_GameUserData_SC.encode(message.Users[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MSG_GameData_SC message, length delimited. Does not implicitly {@link msg.MSG_GameData_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {msg.IMSG_GameData_SC} message MSG_GameData_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_GameData_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_GameData_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_GameData_SC} MSG_GameData_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_GameData_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_GameData_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.GameID = reader.uint64();
                    break;
                case 2:
                    message.Terrain = $root.msg.MSG_GameTerrainData_SC.decode(reader, reader.uint32());
                    break;
                case 3:
                    if (!(message.Users && message.Users.length))
                        message.Users = [];
                    message.Users.push($root.msg.MSG_GameUserData_SC.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_GameData_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_GameData_SC} MSG_GameData_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_GameData_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_GameData_SC message.
         * @function verify
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_GameData_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.GameID != null && message.hasOwnProperty("GameID"))
                if (!$util.isInteger(message.GameID) && !(message.GameID && $util.isInteger(message.GameID.low) && $util.isInteger(message.GameID.high)))
                    return "GameID: integer|Long expected";
            if (message.Terrain != null && message.hasOwnProperty("Terrain")) {
                var error = $root.msg.MSG_GameTerrainData_SC.verify(message.Terrain);
                if (error)
                    return "Terrain." + error;
            }
            if (message.Users != null && message.hasOwnProperty("Users")) {
                if (!Array.isArray(message.Users))
                    return "Users: array expected";
                for (var i = 0; i < message.Users.length; ++i) {
                    var error = $root.msg.MSG_GameUserData_SC.verify(message.Users[i]);
                    if (error)
                        return "Users." + error;
                }
            }
            return null;
        };

        /**
         * Creates a MSG_GameData_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_GameData_SC} MSG_GameData_SC
         */
        MSG_GameData_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_GameData_SC)
                return object;
            var message = new $root.msg.MSG_GameData_SC();
            if (object.GameID != null)
                if ($util.Long)
                    (message.GameID = $util.Long.fromValue(object.GameID)).unsigned = true;
                else if (typeof object.GameID === "string")
                    message.GameID = parseInt(object.GameID, 10);
                else if (typeof object.GameID === "number")
                    message.GameID = object.GameID;
                else if (typeof object.GameID === "object")
                    message.GameID = new $util.LongBits(object.GameID.low >>> 0, object.GameID.high >>> 0).toNumber(true);
            if (object.Terrain != null) {
                if (typeof object.Terrain !== "object")
                    throw TypeError(".msg.MSG_GameData_SC.Terrain: object expected");
                message.Terrain = $root.msg.MSG_GameTerrainData_SC.fromObject(object.Terrain);
            }
            if (object.Users) {
                if (!Array.isArray(object.Users))
                    throw TypeError(".msg.MSG_GameData_SC.Users: array expected");
                message.Users = [];
                for (var i = 0; i < object.Users.length; ++i) {
                    if (typeof object.Users[i] !== "object")
                        throw TypeError(".msg.MSG_GameData_SC.Users: object expected");
                    message.Users[i] = $root.msg.MSG_GameUserData_SC.fromObject(object.Users[i]);
                }
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_GameData_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_GameData_SC
         * @static
         * @param {msg.MSG_GameData_SC} message MSG_GameData_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_GameData_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.Users = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.GameID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.GameID = options.longs === String ? "0" : 0;
                object.Terrain = null;
            }
            if (message.GameID != null && message.hasOwnProperty("GameID"))
                if (typeof message.GameID === "number")
                    object.GameID = options.longs === String ? String(message.GameID) : message.GameID;
                else
                    object.GameID = options.longs === String ? $util.Long.prototype.toString.call(message.GameID) : options.longs === Number ? new $util.LongBits(message.GameID.low >>> 0, message.GameID.high >>> 0).toNumber(true) : message.GameID;
            if (message.Terrain != null && message.hasOwnProperty("Terrain"))
                object.Terrain = $root.msg.MSG_GameTerrainData_SC.toObject(message.Terrain, options);
            if (message.Users && message.Users.length) {
                object.Users = [];
                for (var j = 0; j < message.Users.length; ++j)
                    object.Users[j] = $root.msg.MSG_GameUserData_SC.toObject(message.Users[j], options);
            }
            return object;
        };

        /**
         * Converts this MSG_GameData_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_GameData_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_GameData_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_GameData_SC;
    })();

    msg.MSG_UpdateUserTransfrom_SC = (function() {

        /**
         * Properties of a MSG_UpdateUserTransfrom_SC.
         * @memberof msg
         * @interface IMSG_UpdateUserTransfrom_SC
         * @property {number|Long|null} [ObjectID] MSG_UpdateUserTransfrom_SC ObjectID
         * @property {msg.IT_Transform|null} [Pos] MSG_UpdateUserTransfrom_SC Pos
         */

        /**
         * Constructs a new MSG_UpdateUserTransfrom_SC.
         * @memberof msg
         * @classdesc Represents a MSG_UpdateUserTransfrom_SC.
         * @implements IMSG_UpdateUserTransfrom_SC
         * @constructor
         * @param {msg.IMSG_UpdateUserTransfrom_SC=} [properties] Properties to set
         */
        function MSG_UpdateUserTransfrom_SC(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_UpdateUserTransfrom_SC ObjectID.
         * @member {number|Long} ObjectID
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @instance
         */
        MSG_UpdateUserTransfrom_SC.prototype.ObjectID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_UpdateUserTransfrom_SC Pos.
         * @member {msg.IT_Transform|null|undefined} Pos
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @instance
         */
        MSG_UpdateUserTransfrom_SC.prototype.Pos = null;

        /**
         * Creates a new MSG_UpdateUserTransfrom_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {msg.IMSG_UpdateUserTransfrom_SC=} [properties] Properties to set
         * @returns {msg.MSG_UpdateUserTransfrom_SC} MSG_UpdateUserTransfrom_SC instance
         */
        MSG_UpdateUserTransfrom_SC.create = function create(properties) {
            return new MSG_UpdateUserTransfrom_SC(properties);
        };

        /**
         * Encodes the specified MSG_UpdateUserTransfrom_SC message. Does not implicitly {@link msg.MSG_UpdateUserTransfrom_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {msg.IMSG_UpdateUserTransfrom_SC} message MSG_UpdateUserTransfrom_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_UpdateUserTransfrom_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.ObjectID);
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                $root.msg.T_Transform.encode(message.Pos, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MSG_UpdateUserTransfrom_SC message, length delimited. Does not implicitly {@link msg.MSG_UpdateUserTransfrom_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {msg.IMSG_UpdateUserTransfrom_SC} message MSG_UpdateUserTransfrom_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_UpdateUserTransfrom_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_UpdateUserTransfrom_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_UpdateUserTransfrom_SC} MSG_UpdateUserTransfrom_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_UpdateUserTransfrom_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_UpdateUserTransfrom_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ObjectID = reader.uint64();
                    break;
                case 3:
                    message.Pos = $root.msg.T_Transform.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_UpdateUserTransfrom_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_UpdateUserTransfrom_SC} MSG_UpdateUserTransfrom_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_UpdateUserTransfrom_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_UpdateUserTransfrom_SC message.
         * @function verify
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_UpdateUserTransfrom_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (!$util.isInteger(message.ObjectID) && !(message.ObjectID && $util.isInteger(message.ObjectID.low) && $util.isInteger(message.ObjectID.high)))
                    return "ObjectID: integer|Long expected";
            if (message.Pos != null && message.hasOwnProperty("Pos")) {
                var error = $root.msg.T_Transform.verify(message.Pos);
                if (error)
                    return "Pos." + error;
            }
            return null;
        };

        /**
         * Creates a MSG_UpdateUserTransfrom_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_UpdateUserTransfrom_SC} MSG_UpdateUserTransfrom_SC
         */
        MSG_UpdateUserTransfrom_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_UpdateUserTransfrom_SC)
                return object;
            var message = new $root.msg.MSG_UpdateUserTransfrom_SC();
            if (object.ObjectID != null)
                if ($util.Long)
                    (message.ObjectID = $util.Long.fromValue(object.ObjectID)).unsigned = true;
                else if (typeof object.ObjectID === "string")
                    message.ObjectID = parseInt(object.ObjectID, 10);
                else if (typeof object.ObjectID === "number")
                    message.ObjectID = object.ObjectID;
                else if (typeof object.ObjectID === "object")
                    message.ObjectID = new $util.LongBits(object.ObjectID.low >>> 0, object.ObjectID.high >>> 0).toNumber(true);
            if (object.Pos != null) {
                if (typeof object.Pos !== "object")
                    throw TypeError(".msg.MSG_UpdateUserTransfrom_SC.Pos: object expected");
                message.Pos = $root.msg.T_Transform.fromObject(object.Pos);
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_UpdateUserTransfrom_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @static
         * @param {msg.MSG_UpdateUserTransfrom_SC} message MSG_UpdateUserTransfrom_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_UpdateUserTransfrom_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.ObjectID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.ObjectID = options.longs === String ? "0" : 0;
                object.Pos = null;
            }
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (typeof message.ObjectID === "number")
                    object.ObjectID = options.longs === String ? String(message.ObjectID) : message.ObjectID;
                else
                    object.ObjectID = options.longs === String ? $util.Long.prototype.toString.call(message.ObjectID) : options.longs === Number ? new $util.LongBits(message.ObjectID.low >>> 0, message.ObjectID.high >>> 0).toNumber(true) : message.ObjectID;
            if (message.Pos != null && message.hasOwnProperty("Pos"))
                object.Pos = $root.msg.T_Transform.toObject(message.Pos, options);
            return object;
        };

        /**
         * Converts this MSG_UpdateUserTransfrom_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_UpdateUserTransfrom_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_UpdateUserTransfrom_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_UpdateUserTransfrom_SC;
    })();

    msg.MSG_RemoveUser_SC = (function() {

        /**
         * Properties of a MSG_RemoveUser_SC.
         * @memberof msg
         * @interface IMSG_RemoveUser_SC
         * @property {number|Long|null} [ObjectID] MSG_RemoveUser_SC ObjectID
         */

        /**
         * Constructs a new MSG_RemoveUser_SC.
         * @memberof msg
         * @classdesc Represents a MSG_RemoveUser_SC.
         * @implements IMSG_RemoveUser_SC
         * @constructor
         * @param {msg.IMSG_RemoveUser_SC=} [properties] Properties to set
         */
        function MSG_RemoveUser_SC(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_RemoveUser_SC ObjectID.
         * @member {number|Long} ObjectID
         * @memberof msg.MSG_RemoveUser_SC
         * @instance
         */
        MSG_RemoveUser_SC.prototype.ObjectID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new MSG_RemoveUser_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {msg.IMSG_RemoveUser_SC=} [properties] Properties to set
         * @returns {msg.MSG_RemoveUser_SC} MSG_RemoveUser_SC instance
         */
        MSG_RemoveUser_SC.create = function create(properties) {
            return new MSG_RemoveUser_SC(properties);
        };

        /**
         * Encodes the specified MSG_RemoveUser_SC message. Does not implicitly {@link msg.MSG_RemoveUser_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {msg.IMSG_RemoveUser_SC} message MSG_RemoveUser_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_RemoveUser_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.ObjectID);
            return writer;
        };

        /**
         * Encodes the specified MSG_RemoveUser_SC message, length delimited. Does not implicitly {@link msg.MSG_RemoveUser_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {msg.IMSG_RemoveUser_SC} message MSG_RemoveUser_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_RemoveUser_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_RemoveUser_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_RemoveUser_SC} MSG_RemoveUser_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_RemoveUser_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_RemoveUser_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ObjectID = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_RemoveUser_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_RemoveUser_SC} MSG_RemoveUser_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_RemoveUser_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_RemoveUser_SC message.
         * @function verify
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_RemoveUser_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (!$util.isInteger(message.ObjectID) && !(message.ObjectID && $util.isInteger(message.ObjectID.low) && $util.isInteger(message.ObjectID.high)))
                    return "ObjectID: integer|Long expected";
            return null;
        };

        /**
         * Creates a MSG_RemoveUser_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_RemoveUser_SC} MSG_RemoveUser_SC
         */
        MSG_RemoveUser_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_RemoveUser_SC)
                return object;
            var message = new $root.msg.MSG_RemoveUser_SC();
            if (object.ObjectID != null)
                if ($util.Long)
                    (message.ObjectID = $util.Long.fromValue(object.ObjectID)).unsigned = true;
                else if (typeof object.ObjectID === "string")
                    message.ObjectID = parseInt(object.ObjectID, 10);
                else if (typeof object.ObjectID === "number")
                    message.ObjectID = object.ObjectID;
                else if (typeof object.ObjectID === "object")
                    message.ObjectID = new $util.LongBits(object.ObjectID.low >>> 0, object.ObjectID.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a MSG_RemoveUser_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_RemoveUser_SC
         * @static
         * @param {msg.MSG_RemoveUser_SC} message MSG_RemoveUser_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_RemoveUser_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.ObjectID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.ObjectID = options.longs === String ? "0" : 0;
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (typeof message.ObjectID === "number")
                    object.ObjectID = options.longs === String ? String(message.ObjectID) : message.ObjectID;
                else
                    object.ObjectID = options.longs === String ? $util.Long.prototype.toString.call(message.ObjectID) : options.longs === Number ? new $util.LongBits(message.ObjectID.low >>> 0, message.ObjectID.high >>> 0).toNumber(true) : message.ObjectID;
            return object;
        };

        /**
         * Converts this MSG_RemoveUser_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_RemoveUser_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_RemoveUser_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_RemoveUser_SC;
    })();

    msg.MSG_OperationUserMove_CS = (function() {

        /**
         * Properties of a MSG_OperationUserMove_CS.
         * @memberof msg
         * @interface IMSG_OperationUserMove_CS
         * @property {number|Long|null} [ObjectID] MSG_OperationUserMove_CS ObjectID
         * @property {msg.IT_Vec2|null} [MoveAngle] MSG_OperationUserMove_CS MoveAngle
         */

        /**
         * Constructs a new MSG_OperationUserMove_CS.
         * @memberof msg
         * @classdesc Represents a MSG_OperationUserMove_CS.
         * @implements IMSG_OperationUserMove_CS
         * @constructor
         * @param {msg.IMSG_OperationUserMove_CS=} [properties] Properties to set
         */
        function MSG_OperationUserMove_CS(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_OperationUserMove_CS ObjectID.
         * @member {number|Long} ObjectID
         * @memberof msg.MSG_OperationUserMove_CS
         * @instance
         */
        MSG_OperationUserMove_CS.prototype.ObjectID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_OperationUserMove_CS MoveAngle.
         * @member {msg.IT_Vec2|null|undefined} MoveAngle
         * @memberof msg.MSG_OperationUserMove_CS
         * @instance
         */
        MSG_OperationUserMove_CS.prototype.MoveAngle = null;

        /**
         * Creates a new MSG_OperationUserMove_CS instance using the specified properties.
         * @function create
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {msg.IMSG_OperationUserMove_CS=} [properties] Properties to set
         * @returns {msg.MSG_OperationUserMove_CS} MSG_OperationUserMove_CS instance
         */
        MSG_OperationUserMove_CS.create = function create(properties) {
            return new MSG_OperationUserMove_CS(properties);
        };

        /**
         * Encodes the specified MSG_OperationUserMove_CS message. Does not implicitly {@link msg.MSG_OperationUserMove_CS.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {msg.IMSG_OperationUserMove_CS} message MSG_OperationUserMove_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_OperationUserMove_CS.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.ObjectID);
            if (message.MoveAngle != null && message.hasOwnProperty("MoveAngle"))
                $root.msg.T_Vec2.encode(message.MoveAngle, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified MSG_OperationUserMove_CS message, length delimited. Does not implicitly {@link msg.MSG_OperationUserMove_CS.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {msg.IMSG_OperationUserMove_CS} message MSG_OperationUserMove_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_OperationUserMove_CS.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_OperationUserMove_CS message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_OperationUserMove_CS} MSG_OperationUserMove_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_OperationUserMove_CS.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_OperationUserMove_CS();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ObjectID = reader.uint64();
                    break;
                case 2:
                    message.MoveAngle = $root.msg.T_Vec2.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_OperationUserMove_CS message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_OperationUserMove_CS} MSG_OperationUserMove_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_OperationUserMove_CS.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_OperationUserMove_CS message.
         * @function verify
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_OperationUserMove_CS.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (!$util.isInteger(message.ObjectID) && !(message.ObjectID && $util.isInteger(message.ObjectID.low) && $util.isInteger(message.ObjectID.high)))
                    return "ObjectID: integer|Long expected";
            if (message.MoveAngle != null && message.hasOwnProperty("MoveAngle")) {
                var error = $root.msg.T_Vec2.verify(message.MoveAngle);
                if (error)
                    return "MoveAngle." + error;
            }
            return null;
        };

        /**
         * Creates a MSG_OperationUserMove_CS message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_OperationUserMove_CS} MSG_OperationUserMove_CS
         */
        MSG_OperationUserMove_CS.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_OperationUserMove_CS)
                return object;
            var message = new $root.msg.MSG_OperationUserMove_CS();
            if (object.ObjectID != null)
                if ($util.Long)
                    (message.ObjectID = $util.Long.fromValue(object.ObjectID)).unsigned = true;
                else if (typeof object.ObjectID === "string")
                    message.ObjectID = parseInt(object.ObjectID, 10);
                else if (typeof object.ObjectID === "number")
                    message.ObjectID = object.ObjectID;
                else if (typeof object.ObjectID === "object")
                    message.ObjectID = new $util.LongBits(object.ObjectID.low >>> 0, object.ObjectID.high >>> 0).toNumber(true);
            if (object.MoveAngle != null) {
                if (typeof object.MoveAngle !== "object")
                    throw TypeError(".msg.MSG_OperationUserMove_CS.MoveAngle: object expected");
                message.MoveAngle = $root.msg.T_Vec2.fromObject(object.MoveAngle);
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_OperationUserMove_CS message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_OperationUserMove_CS
         * @static
         * @param {msg.MSG_OperationUserMove_CS} message MSG_OperationUserMove_CS
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_OperationUserMove_CS.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.ObjectID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.ObjectID = options.longs === String ? "0" : 0;
                object.MoveAngle = null;
            }
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (typeof message.ObjectID === "number")
                    object.ObjectID = options.longs === String ? String(message.ObjectID) : message.ObjectID;
                else
                    object.ObjectID = options.longs === String ? $util.Long.prototype.toString.call(message.ObjectID) : options.longs === Number ? new $util.LongBits(message.ObjectID.low >>> 0, message.ObjectID.high >>> 0).toNumber(true) : message.ObjectID;
            if (message.MoveAngle != null && message.hasOwnProperty("MoveAngle"))
                object.MoveAngle = $root.msg.T_Vec2.toObject(message.MoveAngle, options);
            return object;
        };

        /**
         * Converts this MSG_OperationUserMove_CS to JSON.
         * @function toJSON
         * @memberof msg.MSG_OperationUserMove_CS
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_OperationUserMove_CS.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_OperationUserMove_CS;
    })();

    msg.MSG_OperationUserSkill_CS = (function() {

        /**
         * Properties of a MSG_OperationUserSkill_CS.
         * @memberof msg
         * @interface IMSG_OperationUserSkill_CS
         * @property {number|Long|null} [ObjectID] MSG_OperationUserSkill_CS ObjectID
         * @property {number|Long|null} [SkillID] MSG_OperationUserSkill_CS SkillID
         */

        /**
         * Constructs a new MSG_OperationUserSkill_CS.
         * @memberof msg
         * @classdesc Represents a MSG_OperationUserSkill_CS.
         * @implements IMSG_OperationUserSkill_CS
         * @constructor
         * @param {msg.IMSG_OperationUserSkill_CS=} [properties] Properties to set
         */
        function MSG_OperationUserSkill_CS(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_OperationUserSkill_CS ObjectID.
         * @member {number|Long} ObjectID
         * @memberof msg.MSG_OperationUserSkill_CS
         * @instance
         */
        MSG_OperationUserSkill_CS.prototype.ObjectID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_OperationUserSkill_CS SkillID.
         * @member {number|Long} SkillID
         * @memberof msg.MSG_OperationUserSkill_CS
         * @instance
         */
        MSG_OperationUserSkill_CS.prototype.SkillID = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * Creates a new MSG_OperationUserSkill_CS instance using the specified properties.
         * @function create
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {msg.IMSG_OperationUserSkill_CS=} [properties] Properties to set
         * @returns {msg.MSG_OperationUserSkill_CS} MSG_OperationUserSkill_CS instance
         */
        MSG_OperationUserSkill_CS.create = function create(properties) {
            return new MSG_OperationUserSkill_CS(properties);
        };

        /**
         * Encodes the specified MSG_OperationUserSkill_CS message. Does not implicitly {@link msg.MSG_OperationUserSkill_CS.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {msg.IMSG_OperationUserSkill_CS} message MSG_OperationUserSkill_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_OperationUserSkill_CS.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.ObjectID);
            if (message.SkillID != null && message.hasOwnProperty("SkillID"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.SkillID);
            return writer;
        };

        /**
         * Encodes the specified MSG_OperationUserSkill_CS message, length delimited. Does not implicitly {@link msg.MSG_OperationUserSkill_CS.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {msg.IMSG_OperationUserSkill_CS} message MSG_OperationUserSkill_CS message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_OperationUserSkill_CS.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_OperationUserSkill_CS message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_OperationUserSkill_CS} MSG_OperationUserSkill_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_OperationUserSkill_CS.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_OperationUserSkill_CS();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ObjectID = reader.uint64();
                    break;
                case 2:
                    message.SkillID = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_OperationUserSkill_CS message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_OperationUserSkill_CS} MSG_OperationUserSkill_CS
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_OperationUserSkill_CS.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_OperationUserSkill_CS message.
         * @function verify
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_OperationUserSkill_CS.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (!$util.isInteger(message.ObjectID) && !(message.ObjectID && $util.isInteger(message.ObjectID.low) && $util.isInteger(message.ObjectID.high)))
                    return "ObjectID: integer|Long expected";
            if (message.SkillID != null && message.hasOwnProperty("SkillID"))
                if (!$util.isInteger(message.SkillID) && !(message.SkillID && $util.isInteger(message.SkillID.low) && $util.isInteger(message.SkillID.high)))
                    return "SkillID: integer|Long expected";
            return null;
        };

        /**
         * Creates a MSG_OperationUserSkill_CS message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_OperationUserSkill_CS} MSG_OperationUserSkill_CS
         */
        MSG_OperationUserSkill_CS.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_OperationUserSkill_CS)
                return object;
            var message = new $root.msg.MSG_OperationUserSkill_CS();
            if (object.ObjectID != null)
                if ($util.Long)
                    (message.ObjectID = $util.Long.fromValue(object.ObjectID)).unsigned = true;
                else if (typeof object.ObjectID === "string")
                    message.ObjectID = parseInt(object.ObjectID, 10);
                else if (typeof object.ObjectID === "number")
                    message.ObjectID = object.ObjectID;
                else if (typeof object.ObjectID === "object")
                    message.ObjectID = new $util.LongBits(object.ObjectID.low >>> 0, object.ObjectID.high >>> 0).toNumber(true);
            if (object.SkillID != null)
                if ($util.Long)
                    (message.SkillID = $util.Long.fromValue(object.SkillID)).unsigned = true;
                else if (typeof object.SkillID === "string")
                    message.SkillID = parseInt(object.SkillID, 10);
                else if (typeof object.SkillID === "number")
                    message.SkillID = object.SkillID;
                else if (typeof object.SkillID === "object")
                    message.SkillID = new $util.LongBits(object.SkillID.low >>> 0, object.SkillID.high >>> 0).toNumber(true);
            return message;
        };

        /**
         * Creates a plain object from a MSG_OperationUserSkill_CS message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_OperationUserSkill_CS
         * @static
         * @param {msg.MSG_OperationUserSkill_CS} message MSG_OperationUserSkill_CS
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_OperationUserSkill_CS.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.ObjectID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.ObjectID = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.SkillID = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.SkillID = options.longs === String ? "0" : 0;
            }
            if (message.ObjectID != null && message.hasOwnProperty("ObjectID"))
                if (typeof message.ObjectID === "number")
                    object.ObjectID = options.longs === String ? String(message.ObjectID) : message.ObjectID;
                else
                    object.ObjectID = options.longs === String ? $util.Long.prototype.toString.call(message.ObjectID) : options.longs === Number ? new $util.LongBits(message.ObjectID.low >>> 0, message.ObjectID.high >>> 0).toNumber(true) : message.ObjectID;
            if (message.SkillID != null && message.hasOwnProperty("SkillID"))
                if (typeof message.SkillID === "number")
                    object.SkillID = options.longs === String ? String(message.SkillID) : message.SkillID;
                else
                    object.SkillID = options.longs === String ? $util.Long.prototype.toString.call(message.SkillID) : options.longs === Number ? new $util.LongBits(message.SkillID.low >>> 0, message.SkillID.high >>> 0).toNumber(true) : message.SkillID;
            return object;
        };

        /**
         * Converts this MSG_OperationUserSkill_CS to JSON.
         * @function toJSON
         * @memberof msg.MSG_OperationUserSkill_CS
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_OperationUserSkill_CS.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_OperationUserSkill_CS;
    })();

    msg.MSG_FinishGame_SC = (function() {

        /**
         * Properties of a MSG_FinishGame_SC.
         * @memberof msg
         * @interface IMSG_FinishGame_SC
         * @property {boolean|null} [Win] MSG_FinishGame_SC Win
         */

        /**
         * Constructs a new MSG_FinishGame_SC.
         * @memberof msg
         * @classdesc Represents a MSG_FinishGame_SC.
         * @implements IMSG_FinishGame_SC
         * @constructor
         * @param {msg.IMSG_FinishGame_SC=} [properties] Properties to set
         */
        function MSG_FinishGame_SC(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_FinishGame_SC Win.
         * @member {boolean} Win
         * @memberof msg.MSG_FinishGame_SC
         * @instance
         */
        MSG_FinishGame_SC.prototype.Win = false;

        /**
         * Creates a new MSG_FinishGame_SC instance using the specified properties.
         * @function create
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {msg.IMSG_FinishGame_SC=} [properties] Properties to set
         * @returns {msg.MSG_FinishGame_SC} MSG_FinishGame_SC instance
         */
        MSG_FinishGame_SC.create = function create(properties) {
            return new MSG_FinishGame_SC(properties);
        };

        /**
         * Encodes the specified MSG_FinishGame_SC message. Does not implicitly {@link msg.MSG_FinishGame_SC.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {msg.IMSG_FinishGame_SC} message MSG_FinishGame_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_FinishGame_SC.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.Win != null && message.hasOwnProperty("Win"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.Win);
            return writer;
        };

        /**
         * Encodes the specified MSG_FinishGame_SC message, length delimited. Does not implicitly {@link msg.MSG_FinishGame_SC.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {msg.IMSG_FinishGame_SC} message MSG_FinishGame_SC message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_FinishGame_SC.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_FinishGame_SC message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_FinishGame_SC} MSG_FinishGame_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_FinishGame_SC.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_FinishGame_SC();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.Win = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_FinishGame_SC message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_FinishGame_SC} MSG_FinishGame_SC
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_FinishGame_SC.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_FinishGame_SC message.
         * @function verify
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_FinishGame_SC.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.Win != null && message.hasOwnProperty("Win"))
                if (typeof message.Win !== "boolean")
                    return "Win: boolean expected";
            return null;
        };

        /**
         * Creates a MSG_FinishGame_SC message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_FinishGame_SC} MSG_FinishGame_SC
         */
        MSG_FinishGame_SC.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_FinishGame_SC)
                return object;
            var message = new $root.msg.MSG_FinishGame_SC();
            if (object.Win != null)
                message.Win = Boolean(object.Win);
            return message;
        };

        /**
         * Creates a plain object from a MSG_FinishGame_SC message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_FinishGame_SC
         * @static
         * @param {msg.MSG_FinishGame_SC} message MSG_FinishGame_SC
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_FinishGame_SC.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.Win = false;
            if (message.Win != null && message.hasOwnProperty("Win"))
                object.Win = message.Win;
            return object;
        };

        /**
         * Converts this MSG_FinishGame_SC to JSON.
         * @function toJSON
         * @memberof msg.MSG_FinishGame_SC
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_FinishGame_SC.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_FinishGame_SC;
    })();

    msg.TestEnum = (function() {

        /**
         * Properties of a TestEnum.
         * @memberof msg
         * @interface ITestEnum
         */

        /**
         * Constructs a new TestEnum.
         * @memberof msg
         * @classdesc Represents a TestEnum.
         * @implements ITestEnum
         * @constructor
         * @param {msg.ITestEnum=} [properties] Properties to set
         */
        function TestEnum(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new TestEnum instance using the specified properties.
         * @function create
         * @memberof msg.TestEnum
         * @static
         * @param {msg.ITestEnum=} [properties] Properties to set
         * @returns {msg.TestEnum} TestEnum instance
         */
        TestEnum.create = function create(properties) {
            return new TestEnum(properties);
        };

        /**
         * Encodes the specified TestEnum message. Does not implicitly {@link msg.TestEnum.verify|verify} messages.
         * @function encode
         * @memberof msg.TestEnum
         * @static
         * @param {msg.ITestEnum} message TestEnum message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TestEnum.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified TestEnum message, length delimited. Does not implicitly {@link msg.TestEnum.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.TestEnum
         * @static
         * @param {msg.ITestEnum} message TestEnum message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        TestEnum.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a TestEnum message from the specified reader or buffer.
         * @function decode
         * @memberof msg.TestEnum
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.TestEnum} TestEnum
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        TestEnum.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.TestEnum();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a TestEnum message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.TestEnum
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.TestEnum} TestEnum
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        TestEnum.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a TestEnum message.
         * @function verify
         * @memberof msg.TestEnum
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        TestEnum.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates a TestEnum message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.TestEnum
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.TestEnum} TestEnum
         */
        TestEnum.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.TestEnum)
                return object;
            return new $root.msg.TestEnum();
        };

        /**
         * Creates a plain object from a TestEnum message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.TestEnum
         * @static
         * @param {msg.TestEnum} message TestEnum
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        TestEnum.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this TestEnum to JSON.
         * @function toJSON
         * @memberof msg.TestEnum
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        TestEnum.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        /**
         * E1 enum.
         * @name msg.TestEnum.E1
         * @enum {string}
         * @property {number} E1_T1=1 E1_T1 value
         * @property {number} E1_T2=2 E1_T2 value
         * @property {number} E1_T3=3 E1_T3 value
         */
        TestEnum.E1 = (function() {
            var valuesById = {}, values = Object.create(valuesById);
            values[valuesById[1] = "E1_T1"] = 1;
            values[valuesById[2] = "E1_T2"] = 2;
            values[valuesById[3] = "E1_T3"] = 3;
            return values;
        })();

        /**
         * E2 enum.
         * @name msg.TestEnum.E2
         * @enum {string}
         * @property {number} E2_T1=1 E2_T1 value
         * @property {number} E2_T2=2 E2_T2 value
         * @property {number} E2_T3=3 E2_T3 value
         */
        TestEnum.E2 = (function() {
            var valuesById = {}, values = Object.create(valuesById);
            values[valuesById[1] = "E2_T1"] = 1;
            values[valuesById[2] = "E2_T2"] = 2;
            values[valuesById[3] = "E2_T3"] = 3;
            return values;
        })();

        return TestEnum;
    })();

    msg.MSG_Ping = (function() {

        /**
         * Properties of a MSG_Ping.
         * @memberof msg
         * @interface IMSG_Ping
         * @property {number|Long|null} [timeStamp] MSG_Ping timeStamp
         * @property {msg.TestEnum.E1|null} [e] MSG_Ping e
         */

        /**
         * Constructs a new MSG_Ping.
         * @memberof msg
         * @classdesc Represents a MSG_Ping.
         * @implements IMSG_Ping
         * @constructor
         * @param {msg.IMSG_Ping=} [properties] Properties to set
         */
        function MSG_Ping(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_Ping timeStamp.
         * @member {number|Long} timeStamp
         * @memberof msg.MSG_Ping
         * @instance
         */
        MSG_Ping.prototype.timeStamp = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_Ping e.
         * @member {msg.TestEnum.E1} e
         * @memberof msg.MSG_Ping
         * @instance
         */
        MSG_Ping.prototype.e = 1;

        /**
         * Creates a new MSG_Ping instance using the specified properties.
         * @function create
         * @memberof msg.MSG_Ping
         * @static
         * @param {msg.IMSG_Ping=} [properties] Properties to set
         * @returns {msg.MSG_Ping} MSG_Ping instance
         */
        MSG_Ping.create = function create(properties) {
            return new MSG_Ping(properties);
        };

        /**
         * Encodes the specified MSG_Ping message. Does not implicitly {@link msg.MSG_Ping.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_Ping
         * @static
         * @param {msg.IMSG_Ping} message MSG_Ping message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_Ping.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.timeStamp != null && message.hasOwnProperty("timeStamp"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.timeStamp);
            if (message.e != null && message.hasOwnProperty("e"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.e);
            return writer;
        };

        /**
         * Encodes the specified MSG_Ping message, length delimited. Does not implicitly {@link msg.MSG_Ping.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_Ping
         * @static
         * @param {msg.IMSG_Ping} message MSG_Ping message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_Ping.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_Ping message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_Ping
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_Ping} MSG_Ping
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_Ping.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_Ping();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.timeStamp = reader.uint64();
                    break;
                case 2:
                    message.e = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_Ping message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_Ping
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_Ping} MSG_Ping
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_Ping.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_Ping message.
         * @function verify
         * @memberof msg.MSG_Ping
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_Ping.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.timeStamp != null && message.hasOwnProperty("timeStamp"))
                if (!$util.isInteger(message.timeStamp) && !(message.timeStamp && $util.isInteger(message.timeStamp.low) && $util.isInteger(message.timeStamp.high)))
                    return "timeStamp: integer|Long expected";
            if (message.e != null && message.hasOwnProperty("e"))
                switch (message.e) {
                default:
                    return "e: enum value expected";
                case 1:
                case 2:
                case 3:
                    break;
                }
            return null;
        };

        /**
         * Creates a MSG_Ping message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_Ping
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_Ping} MSG_Ping
         */
        MSG_Ping.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_Ping)
                return object;
            var message = new $root.msg.MSG_Ping();
            if (object.timeStamp != null)
                if ($util.Long)
                    (message.timeStamp = $util.Long.fromValue(object.timeStamp)).unsigned = true;
                else if (typeof object.timeStamp === "string")
                    message.timeStamp = parseInt(object.timeStamp, 10);
                else if (typeof object.timeStamp === "number")
                    message.timeStamp = object.timeStamp;
                else if (typeof object.timeStamp === "object")
                    message.timeStamp = new $util.LongBits(object.timeStamp.low >>> 0, object.timeStamp.high >>> 0).toNumber(true);
            switch (object.e) {
            case "E1_T1":
            case 1:
                message.e = 1;
                break;
            case "E1_T2":
            case 2:
                message.e = 2;
                break;
            case "E1_T3":
            case 3:
                message.e = 3;
                break;
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_Ping message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_Ping
         * @static
         * @param {msg.MSG_Ping} message MSG_Ping
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_Ping.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.timeStamp = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.timeStamp = options.longs === String ? "0" : 0;
                object.e = options.enums === String ? "E1_T1" : 1;
            }
            if (message.timeStamp != null && message.hasOwnProperty("timeStamp"))
                if (typeof message.timeStamp === "number")
                    object.timeStamp = options.longs === String ? String(message.timeStamp) : message.timeStamp;
                else
                    object.timeStamp = options.longs === String ? $util.Long.prototype.toString.call(message.timeStamp) : options.longs === Number ? new $util.LongBits(message.timeStamp.low >>> 0, message.timeStamp.high >>> 0).toNumber(true) : message.timeStamp;
            if (message.e != null && message.hasOwnProperty("e"))
                object.e = options.enums === String ? $root.msg.TestEnum.E1[message.e] : message.e;
            return object;
        };

        /**
         * Converts this MSG_Ping to JSON.
         * @function toJSON
         * @memberof msg.MSG_Ping
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_Ping.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_Ping;
    })();

    msg.MSG_Pong = (function() {

        /**
         * Properties of a MSG_Pong.
         * @memberof msg
         * @interface IMSG_Pong
         * @property {msg.IMSG_Ping|null} [data] MSG_Pong data
         * @property {number|Long|null} [serverTime] MSG_Pong serverTime
         * @property {msg.TestEnum.E2|null} [e] MSG_Pong e
         */

        /**
         * Constructs a new MSG_Pong.
         * @memberof msg
         * @classdesc Represents a MSG_Pong.
         * @implements IMSG_Pong
         * @constructor
         * @param {msg.IMSG_Pong=} [properties] Properties to set
         */
        function MSG_Pong(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * MSG_Pong data.
         * @member {msg.IMSG_Ping|null|undefined} data
         * @memberof msg.MSG_Pong
         * @instance
         */
        MSG_Pong.prototype.data = null;

        /**
         * MSG_Pong serverTime.
         * @member {number|Long} serverTime
         * @memberof msg.MSG_Pong
         * @instance
         */
        MSG_Pong.prototype.serverTime = $util.Long ? $util.Long.fromBits(0,0,true) : 0;

        /**
         * MSG_Pong e.
         * @member {msg.TestEnum.E2} e
         * @memberof msg.MSG_Pong
         * @instance
         */
        MSG_Pong.prototype.e = 1;

        /**
         * Creates a new MSG_Pong instance using the specified properties.
         * @function create
         * @memberof msg.MSG_Pong
         * @static
         * @param {msg.IMSG_Pong=} [properties] Properties to set
         * @returns {msg.MSG_Pong} MSG_Pong instance
         */
        MSG_Pong.create = function create(properties) {
            return new MSG_Pong(properties);
        };

        /**
         * Encodes the specified MSG_Pong message. Does not implicitly {@link msg.MSG_Pong.verify|verify} messages.
         * @function encode
         * @memberof msg.MSG_Pong
         * @static
         * @param {msg.IMSG_Pong} message MSG_Pong message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_Pong.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.data != null && message.hasOwnProperty("data"))
                $root.msg.MSG_Ping.encode(message.data, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.serverTime != null && message.hasOwnProperty("serverTime"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.serverTime);
            if (message.e != null && message.hasOwnProperty("e"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.e);
            return writer;
        };

        /**
         * Encodes the specified MSG_Pong message, length delimited. Does not implicitly {@link msg.MSG_Pong.verify|verify} messages.
         * @function encodeDelimited
         * @memberof msg.MSG_Pong
         * @static
         * @param {msg.IMSG_Pong} message MSG_Pong message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        MSG_Pong.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a MSG_Pong message from the specified reader or buffer.
         * @function decode
         * @memberof msg.MSG_Pong
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {msg.MSG_Pong} MSG_Pong
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_Pong.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_Pong();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.data = $root.msg.MSG_Ping.decode(reader, reader.uint32());
                    break;
                case 2:
                    message.serverTime = reader.uint64();
                    break;
                case 3:
                    message.e = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a MSG_Pong message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof msg.MSG_Pong
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {msg.MSG_Pong} MSG_Pong
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        MSG_Pong.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a MSG_Pong message.
         * @function verify
         * @memberof msg.MSG_Pong
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        MSG_Pong.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.data != null && message.hasOwnProperty("data")) {
                var error = $root.msg.MSG_Ping.verify(message.data);
                if (error)
                    return "data." + error;
            }
            if (message.serverTime != null && message.hasOwnProperty("serverTime"))
                if (!$util.isInteger(message.serverTime) && !(message.serverTime && $util.isInteger(message.serverTime.low) && $util.isInteger(message.serverTime.high)))
                    return "serverTime: integer|Long expected";
            if (message.e != null && message.hasOwnProperty("e"))
                switch (message.e) {
                default:
                    return "e: enum value expected";
                case 1:
                case 2:
                case 3:
                    break;
                }
            return null;
        };

        /**
         * Creates a MSG_Pong message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof msg.MSG_Pong
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {msg.MSG_Pong} MSG_Pong
         */
        MSG_Pong.fromObject = function fromObject(object) {
            if (object instanceof $root.msg.MSG_Pong)
                return object;
            var message = new $root.msg.MSG_Pong();
            if (object.data != null) {
                if (typeof object.data !== "object")
                    throw TypeError(".msg.MSG_Pong.data: object expected");
                message.data = $root.msg.MSG_Ping.fromObject(object.data);
            }
            if (object.serverTime != null)
                if ($util.Long)
                    (message.serverTime = $util.Long.fromValue(object.serverTime)).unsigned = true;
                else if (typeof object.serverTime === "string")
                    message.serverTime = parseInt(object.serverTime, 10);
                else if (typeof object.serverTime === "number")
                    message.serverTime = object.serverTime;
                else if (typeof object.serverTime === "object")
                    message.serverTime = new $util.LongBits(object.serverTime.low >>> 0, object.serverTime.high >>> 0).toNumber(true);
            switch (object.e) {
            case "E2_T1":
            case 1:
                message.e = 1;
                break;
            case "E2_T2":
            case 2:
                message.e = 2;
                break;
            case "E2_T3":
            case 3:
                message.e = 3;
                break;
            }
            return message;
        };

        /**
         * Creates a plain object from a MSG_Pong message. Also converts values to other types if specified.
         * @function toObject
         * @memberof msg.MSG_Pong
         * @static
         * @param {msg.MSG_Pong} message MSG_Pong
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        MSG_Pong.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.data = null;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.serverTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.serverTime = options.longs === String ? "0" : 0;
                object.e = options.enums === String ? "E2_T1" : 1;
            }
            if (message.data != null && message.hasOwnProperty("data"))
                object.data = $root.msg.MSG_Ping.toObject(message.data, options);
            if (message.serverTime != null && message.hasOwnProperty("serverTime"))
                if (typeof message.serverTime === "number")
                    object.serverTime = options.longs === String ? String(message.serverTime) : message.serverTime;
                else
                    object.serverTime = options.longs === String ? $util.Long.prototype.toString.call(message.serverTime) : options.longs === Number ? new $util.LongBits(message.serverTime.low >>> 0, message.serverTime.high >>> 0).toNumber(true) : message.serverTime;
            if (message.e != null && message.hasOwnProperty("e"))
                object.e = options.enums === String ? $root.msg.TestEnum.E2[message.e] : message.e;
            return object;
        };

        /**
         * Converts this MSG_Pong to JSON.
         * @function toJSON
         * @memberof msg.MSG_Pong
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        MSG_Pong.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return MSG_Pong;
    })();

    return msg;
})();